欢迎关注微信公众号:冬瓜白
后续会开启一个新的系列,“做一名有经验的开发人员”(这也是刚入行的时候跟朋友们经常开玩笑的一句话),主要是对平时工作中从周边大佬身上学习的总结,以及自己的一些思考。
以本文相关的 Redis 为例,集群、Replication,数据结构网上的学习资料很多,有的甚至还从 Redis 源码的角度进行分析,但是真的当出现了线上问题的时候该如何处理呢,这时候经验和思维方式就很重要了,甚至于在国内很多公司环境下,是最重要的,没有之一。
注:本文是对组内大佬鑫哥的思考方式的总结,已申请授权。
前天早上 DBA 在群里反馈 Redis 内存爆了:
这里有几个关键点:
- 是大半夜
- 是突然暴涨
这时候我的第一个反应是找 DBA 看下大 key,但事后来看,这个思路其实就已经走偏了,Redis 中大 key 是肯定有的,甚至于是一直存在的,但为什么独独就这天晚上“突然爆了”。所以问题的关键其实并不是 Redis 中有哪些大 key,而是哪些大 key 是这天晚上激增的(当然我们现有的运维能力是无法查出 Redis 的操作日志的,也无法对比前几天晚上这个点和这天晚上这个点 Redis 中 key 的内容),所以即使你找到了大 key,并且处理了,但你仍然不知道为啥会突然暴涨。
还有一个思路是从定时任务的角度出发,可能某些特殊原因造成某些数据暴涨,定时任务夜间执行处理暴涨数据的时候引发了 Redis 内存暴涨,而本次问题不在这一范畴。
于是鑫哥有了一个新的思路,看一下半夜暴涨的时间点哪些请求的量很大,因为是半夜,所以很容易找出那个最特别的接口,于是最终就定位到了这个问题。
总
最后问题解决的时候感觉索然无味,但情况就是这么个情况,知道了就很简单,不知道就永远想不到。