作者:任坤

现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL、mongoDB 和 Redis 维护工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


1、背景

线上有套 redis 主从,版本4.0,开发抱怨说经常会出现周期性卡顿。

应用日志显示每隔10多分钟出现一次,一个普通调用就需要执行1s左右,然后自动恢复,get/set 均受影响

2、诊断

查看 redis qps 和 cpu 监控,均未发现有用线索。

登录 redis 查看 slowlog ,也没有吻合时间点的慢查询。

evicted_keys 指标一直是 0 ,expired_keys 数量虽然很多,但是一直没有明显波动,不太可能是驱逐过期键导致。

经组里同事提醒注意到 latest_fork_usec 指标,执行一次接近1s左右,大约每15分钟触发一次 bgsave ,和应用出现慢查询的频率大致吻合,现在初步认定是 redis 实例定期 bgsave 导 致的应用卡顿。

在相当长的一段时间内,我一直认为 redis 的 bgsave 衍生出1个子进程并且采用 copy-on- write 机制,不会对 redis 本身有太多影响,顶多落盘时占用点 IO 资源而已。

潜在瓶颈点出现fork()调用上

Under Linux, fork() is implemented using copy‐on‐write pages, so the
only penalty that it incurs is the time and memory required to duplicate the
parent's page tables, and to create a unique task structure for the child.

如果父进程的页表比较大,fork()耗时就会相应延长,且 redis 采用了单工作进程模型, fork()执行期间会阻塞所有用户请求。

当前 redis 实例的 RSS 已经达到了16G

页表大小33M

cat /proc/8844/status | grep ‐i pte
VmPTE: 33840 kB

采用 strace 跟踪一下fork()耗时,在 glibc 里 fork 的调用实际上映射到了更底层的 clone 系统 调用,因指定-e trace=clone

# strace ‐p 20324 ‐e trace=clone ‐T
...
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHL D, child_tidptr=0x7f409d771a10) = 30793 <1.013945>
...

于此对应的 redis 监控指标为

latest_fork_usec:1014778

两者吻合,由此可以确认是 redis 定期 bgsave 引发的。

最简单的方法是禁用 bgsave ,但这种行为有很大的风险,一旦主库被误杀且在主从切换前又被迅速拉起,会导致 redis 数据全部丢失。

查看 redis 的内存利用率,存在很严重的内存碎片,

used_memory_human 8.7G
......
used_memory_rss_human 16.1G

这套 redis 马上就要迁移,新环境实例的 RSS 只有8.8G,latest_fork_usec 指标也下降达到了0.25s左右,和开发确认后可以满足应用需求,迁移后应用的定期卡顿现象有了很明显的缓解。

redis 4.0 引入了碎片自动回收功能,由参数 activedefrag 调控,默认关闭。迁移后对老 redis 开启了 activedefrag(其余参数保持默认值),最终 used_memory_rss_human 固定在11G左右,latest_fork_usec 在0.76s左右。新环境以后也可能会遭遇严重内存碎片,届时要么开启activedefrag,要么在维护时间段重启实例,后者效果显然更好一点。

3、小结

我们线上 redis 主从都开启了 bgsave ,之前一直忽视了bgsave/fork()可能引发的性能波动,最好的解决办法就是控制单个 redis 的内存上限,如果业务端无法瘦身可以考虑 redis cluster 或者设置 maxmemory 。 以后如果遇到了 redis 定期卡顿现象,可以优先从 latest_fork_usec 监控指标入手。

故障分析 | bgsave 导致 redis 定期卡顿案例一则相关推荐

  1. [iOS]调和 pop 手势导致 AVPlayer 播放卡顿

    作者 NewPan 关注 2017.07.15 14:24* 字数 3110 阅读 749评论 8喜欢 17 声明:我为这个框架写了四篇文章: 第一篇:[iOS]UINavigationControl ...

  2. 解决 js 长任务导致的页面卡顿(时间分片技术)

    时间分片技术 解决 js 长任务导致的页面卡顿 界面操作使用transform动画会使用GPU,不会让界面卡死 解决 js 长任务导致的页面卡顿 在web界面运行长时间代码时,会造成界面卡死,最新看了 ...

  3. PS占用CPU太高,导致电脑异常卡顿

    Adobe Photoshop(PS):占用CPU太高,导致电脑异常卡顿 1.软件环境 2.问题描述 3.解决方案 3.1.获取后台服务关闭工具 3.2.永久禁止`Adobe`后台服务 3.2.1.快 ...

  4. unity如何解决协程开启频繁导致的程序卡顿

    unity如何解决协程开启频繁导致的程序卡顿 一.协程 协程并不会在Unity中开辟新的线程来执行,其执行仍然发生在主线程中.当我们有较为耗时的操作时,可以将该操作分散到几帧或者几秒内完成,而不用在一 ...

  5. 一文带你了解如何排查内存泄漏导致的页面卡顿现象

    作者 | 零一0101       责编 | 欧阳姝黎 不知道在座的各位有没有被问到过这样一个问题:如果页面卡顿,你觉得可能是什么原因造成的?有什么办法锁定原因并解决吗? 这是一个非常宽泛而又有深度的 ...

  6. 关于图片解压缩,导致scrollView滚动卡顿

    可以看出在开发的时候,如果scrollView中有很多图片,那么在拖动的过程中,会有明显的卡顿,这是因为每次显示一个UIImageView的时候都需要将图片文件解压缩并渲染到屏幕上这一系列工作上,然而 ...

  7. SimpleAudioEngine音效的使用导致游戏出现卡顿记录

    之前发现游戏战斗场景某个特殊时刻会卡顿一下,一直在研究其他东西没去看 今天花了点时间看了下. 一开始我还以为是dc太高或者代码创建效果有问题导致的卡顿 通过不断缩小范围的打印 最后发现居然是播放音效导 ...

  8. linux系统安装显卡驱动卡顿,关于Ubuntu16.04上N卡驱动导致滚动屏幕卡顿问题

    环境 Ubuntu16.04 1080ti显卡 问题 屏幕显示正常,但是在打开网页或者进行跑深度学习程序的时候画面会发生一卡一下的情况,严重时出现类似于死机的情况.查看系统monitor并不显示显存和 ...

  9. mysql定期卡顿_MySQL卡顿和优化

    转载别人论坛的评论:mysql 1.若是是你,你怎么处理慢查询引发的问题,而且在之后避免这种状况发生?sql 对于MySQL的慢查询问题,一般咱们是这么干的: 1)开启MySQL服务器的慢查询记录功能 ...

最新文章

  1. 【Qt笔记】对象模型
  2. 1.10 卷积神经网络示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. 一款超级简单的瀑布流的制作
  4. 为什么vs会输出一个框作为结果_检测与分类专辑 | 对精准目标检测的含不确定性的边界框回归...
  5. Windows Phone 7 Bitmap编码
  6. 程序员如何高效的学习?
  7. java中解密技术是什么_详解Java 加密解密技术的分类和归纳
  8. 南师大附中2021高考成绩查询,2021高考倒计时,你有一份师大附中专属回忆录待查收~...
  9. Close window without alert
  10. mysql怎么获得权限_mysql怎么给用户加权限
  11. 【杂文】【python】Python 对象的析构
  12. idea 配置J2EE
  13. 分布式定时任务解决方案
  14. python操作cad的模块_利用python控制Autocad:pyautocad方式
  15. Markdown表格中换行、合并单元格
  16. 四、vue 项目使用高德地图画面(多边形)
  17. Hive中的in、exists和left semi join
  18. 溢出的原理及 shellcode 编写
  19. 前端开发框架、工具汇总清单
  20. php usc2,CSDN 免积分下载原理

热门文章

  1. jstat的主要用法
  2. 网易云音乐HTML5随机音乐播放器源码
  3. 加入VR公司到底需要什么技能?
  4. 微信公众号获取微信授权,不弹授权页面
  5. Oracle 执行sql报错 ORA-20401:Reject By Dbsec
  6. 市场平台,都离不开“流量”,那泰山模式呢?
  7. [ 数论 ] Codeforces896D
  8. S5PV210 Linux内核移植 - 天嵌E8
  9. 【猫优壁纸】云开发的壁纸类运营小程序、多端适配、创作者系统可运营
  10. 保定市中专计算机专业主要学什么课程,保定科技中等专业学校特色专业之计算机专业...