Redis 常见的持久化开发运维问题

开发运维常见问题

  • fork操作

  • 进程外开销

  • AOF追加阻塞

  • 单机多实例部署

fork操作

1.同步操作 

    内存页的拷贝,本身速度非常快,不会阻塞主线程 

2.与内存量有关:内存越大,耗时越长 

3.info:latest_fork_usec #fork  fork的执行时间

4.改善fork 

1).有限使用物理机或者高效支持fork操作的虚拟化技术

2).控制Redis 实例最大可用内存 :maxmemory

3)合理配置linux内存分配策略 :vm.overcommit_memory=1

4).降低fork 频率:例如放宽AOF重写自动触发时机,不必要的全量复制

子进程的开销和优化

1.cpu

开销:RDB和AOF 文件生成,属于cpu密集型

优化:不做cpu绑定,不和cpu 密集型部署

2.内存

开销:fork 内存开销,共享父进程快照

优化:避免单机多部署的大量重写

3.硬盘

开销:AOF 和RDB文件写入,可以结合iostat,iotop分析

硬盘优化:

  1. 不要和高硬盘负载服务部署在一起:储存服务,消息队列

  2. no-appendfsync-on-rewrite = yes

  3. 根据写入量觉定磁盘类型:例如SSD

  4. 单机多实例持久化文件目录可以考虑分盘            

AOF追加阻塞(可以参考硬盘的优化策略)

    主线程负责写入AOF缓存区,同步线程负责没秒刷盘操作对比上次AOF同步时间。如果大于2s 阻塞,直到同步完成

小于2s,通过。

猜你喜欢

转载自blog.csdn.net/qq_29373285/article/details/84849639