Redis 开发运维常见问题
- fork操作
- 进程外开销
- AOF追加阻塞
- 单机多实例部署
fork操作
- 首先fork操作是个同步操作,例如执行bgsave/aof 重写时,主线程执行fork同步 响应OK 生成子线程
- 与内存量息息相关:内存越大,耗时越大
- info: latest_fork_usec 查看上次执行fork 消耗的微妙数
改善fork
- 使用性能较高的物理机
- 控制Redis实例最大可用内存:maxmemory
- 合理配置Linux内存分配策略:vm.overcommit_memort=1
- 降低fork频率:例如放宽AOF重写自动触发时机,不必要的全量复制(主从复制)
子进程开销和优化
- CPU: 开销:RDB和AOF文件生成,属于CPU密集型 优化:不做CPU绑定,不和CPU密集型部署
- 内存: 开销:fork内存开销,copy-on-write 优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 硬盘: 开销:AOF和RDB文件写入,可以结合iostat,iotop分析
优化: 不要和高负载服务部署在一起,存储服务,消息队列等
no-appendfsync-on-rewrite = yes
根据写入量决定磁盘类型:例如ssd