美文网首页
第六章-开发运维的常见问题

第六章-开发运维的常见问题

作者: asfafjwefhfuer | 来源:发表于2019-04-20 22:42 被阅读0次

目录

  1. fork操作
  2. 进程外开销
  3. AOF追加阻塞
  4. 单机多实例部署

一. fork操作

当执行一个bgsave或bgrewriteaof首先会执行一个fork操作,它只是一做一个内存页的拷贝,并不是拷贝的内存,所以它的速度是非常快的。当fork操作比较慢或卡在某一个点,这时它会阻塞redis主线程

  1. 同步操作
  2. 与内存量息息相关: 内存越大,耗时越长(与机器类型有关)
  3. info:latest_fork_usec: 查看上一次fork操作耗时的微秒数

改善fork

  1. 优先使用物理机或者高效支持fork操作的虚拟化技术
  2. 控制Redis实例最大可用内存:maxmemory
  3. 合理配置Linux内存分配策略; vm.overcommit_memory=1
  4. 降低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分析
  • 优化 :
    1. 不要和高硬盘负载服务部署在一起: 存储服务、消息队列等。
    2. no-appendfsync-on-rewrite =yes
    3. 根据写入量决定磁盘类型 : ssd
    4. 单机多实例持久化文件目录可以考虑分盘

三. AOF追加阻塞

image.png image.png image.png 硬盘信息查看

四. 单机多实例部署

相关文章

网友评论

      本文标题:第六章-开发运维的常见问题

      本文链接:https://www.haomeiwen.com/subject/ehdrgqtx.html