fork操作耗时,卡住主线程的问题

来源:6-2 fork

慕莱坞0103086

2020-04-19

老师,fork子线程后,让子线程执行bgsave和aofrewrite,它和redis主线程是异步的,为什么此时fork操作慢还是会卡住redis主线程?

写回答

2回答

梦飞_0002

2021-04-20

首先fork是由主进程同步执行的,本身就会存在阻塞,只不过平常我们fork是很快的,阻塞时间可以忽略估计,这里说的卡住主线程是长时间的阻塞,fork时会运用copy on write的技术,将主进程的内存页表copy给子进程实现父子进程内存共享,因此fork的耗时与copy的内存页表的大小正相关,如果当前redis实例内存数据过大,比如10G,那么主进程的内存页表也会越大,copy内存页表的耗时自然越久,最终导致fork操作卡住主进程。所以一般对于redis实例的max-memory不要设的过大,一般保持在2-4G即可

1
0

你笑就好

2020-04-28

个人理解, fork出来子进程来执行AOF命令, 本身还是需要读取AOF文件,  同时主线程执行命令是要往AOF文件里写入的, 两者本身是冲突的, 就印证老师那句话, AOF文件不能太大, 会阻塞到主线程

还有一句话, bgsave和aofrewrite这两个的诞生, 主要是为了不影响主进程的执行!!!!!!执行过程和阻塞的aof命令, 过程是一样的

0
0

一站式学习Redis 从入门到高可用分布式实践

Redis课程升级!系统梳理Redis知识体系,掌握redis必备!

2277 学习 · 261 问题

查看课程