线上排查|线上Redis负载暴涨100%,业务中断,这样排查很赞!
HI! 我是小小,今天是本周的第六篇,本篇将会着重讲解关于Redis负载的问题。
网页监控
通过阿里的Grafana监控,发现服务器的CPU负载,内存,网络输入输出相当正常,所以Redis出现问题。使用单节点的32M 16GB的阿里云Redis,登录网页,查看性能监控,发现CPU使用飙升到100%;
QPS从1000升高到6000,但是远远低于极限值,连接数量从0升高到3000,也就是远远低于极限值。临时方案:先短期租用一台Redis,临时更换Redis配置,重启应用。尽快排查
服务器命令监控
登录Redis-cli,通过info命令查看服务器状态和命令统计,总结异常点:
查询Reduis慢指令slowlog,以及keys_并且耗费时间严重,在当前业务下执行keys_会导致阻塞业务,导致查询国漫,cpu过稿。
查看redis指令执行情况,排除exec,flushall指令,业务使用指令过程中耗时严重的有setnx有7.5千万次调用平均耗时6s,setex有8.4万次调用平均耗时7.33s,del有2.6亿吃调研耗时69s,hegtall有14亿次调用耗时20s,keys有2千万次调用平均耗时 3740s。通常而言,这些指令耗时与 value 大小呈正比,所以可以排查这些指令相关的数据近期有没有较大增长。或者近期有没有业务改造,会频繁使用上述指令,也会造成 cpu 高。
通过 info commandstats 可以查看 Redis 命令统计信息,其中命令格式是
调用次数、耗费CPU时间、每个命令平均耗费CPU(单位为微秒)
通过 slowlog 命令查看慢命令(默认超过 10ms 就会被记录到日志,只会记录其命令执行的时间,不包含 IO 往返操作,也不记录单由网络延迟引起的响应慢)slowlog命令格式如下
图中各字段表示的是:
1=日志的唯一标识符
2=命令的执行时间点,以UNIX时间戳表示
3=查询命令执行时间,以微妙为单位,中的是230ms
4=执行的命令,以数组的形式排列。完整的命令是 keys mucury:*所以通过这些参数,基本可以确定,是突然有大量的keys *命令导致CPU负载升高,导致响应延迟,问题我们应用中没有开放keys *命令问题解决
关于作者
我是小小,双鱼座的程序猿,我么下期再见~bye
END
「 往期文章 」
声明:以上内容并不代表本网赞同其观点。如有任何问题,请与不良与违法信息举报中心联系:513175919@qq.com。