ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 一、fork ### 1.fork操作 * 同步操作 ,fork 是一个同步操作 * 当执行一个 bgsave 或 bgrewriteaof 首先会执行一个 fork 操作,它只是做一个内存页的拷贝,并不是拷贝所有内存,所以他的速度是非常快的。 * 当 fork操作比较慢或卡在某一个点,这时它会阻塞redis主线程 * 与内存量息息相关:内存越大,消耗越长(与机器类型有关) * info:latest_fork_usec -- 可以查看 fork 的执行时间 ### 2.改善fork * 优先使用物理机或者高效支持fork操作的虚拟化技术 * 控制Redis 实例最大可用内存:maxmemory * 合理配置Linux内存分配策略:vm.overcommit_memory = 1 * 默认是0,当发现没有足够内存做内存分配时,就会不去分配。对于fork讲,会造成fork阻塞。 * 降低fork频率:例如放宽AOF重写自动触发机制,不必要的全量复制 ## 二、子进程开销和优化 ### 1.CPU * 开销:RDB和AOF文件生成,属于CPU密集型 * 优化:不做CPU绑定,不和CPU密集型部署 ### 2.内存 * 开销:fork内存开销,copy-on-write * 优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled ### 3.硬盘 * 开销:AOF和RDB文件写入,可以结合iostat,iotop分析 * 优化 * 不要和高硬盘负载服务器部署在一起:存储服务、消息队列等 * no-appendfsync-on-rewrite = yes * 根据写入量决定磁盘类型:例如SSD * 单机多实例持久化文件目录可以考虑分盘 ## 三、AOF阻塞