线上排查 | 线上Redis负载暴涨100%,业务中断,这样排查很赞!

HI! 我是小小,今天是本周的第六篇,本篇将会着重讲解关于Redis负载的问题。

网页监控

通过阿里的Grafana监控,发现服务器的CPU负载,内存,网络输入输出相当正常,所以Redis出现问题。使用单节点的32M 16GB的阿里云Redis,登录网页,查看性能监控,发现CPU使用飙升到100%;线上排查 | 线上Redis负载暴涨100%,业务中断,这样排查很赞!_第1张图片QPS从1000升高到6000,但是远远低于极限值,连接数量从0升高到3000,也就是远远低于极限值。临时方案:先短期租用一台Redis,临时更换Redis配置,重启应用。尽快排查

服务器命令监控

登录Redis-cli,通过info命令查看服务器状态和命令统计,总结异常点:

  1. 查询Reduis慢指令slowlog,以及keys_并且耗费时间严重,在当前业务下执行keys_会导致阻塞业务,导致查询国漫,cpu过稿。

  2. 查看redis指令执行情况,排除exec,flushall指令,业务使用指令过程中耗时严重的有setnx有7.5千万次调用平均耗时6s,setex有8.4万次调用平均耗时7.33s,del有2.6亿吃调研耗时69s,hegtall有14亿次调用耗时20s,keys有2千万次调用平均耗时 3740s。通常而言,这些指令耗时与 value 大小呈正比,所以可以排查这些指令相关的数据近期有没有较大增长。或者近期有没有业务改造,会频繁使用上述指令,也会造成 cpu 高。线上排查 | 线上Redis负载暴涨100%,业务中断,这样排查很赞!_第2张图片通过 info commandstats 可以查看 Redis 命令统计信息,其中命令格式是

cmdstat_XXX: calls=XXX,usec=XXX,usec_per_call=XXX

调用次数、耗费CPU时间、每个命令平均耗费CPU(单位为微秒)

通过 slowlog 命令查看慢命令(默认超过 10ms 就会被记录到日志,只会记录其命令执行的时间,不包含 IO 往返操作,也不记录单由网络延迟引起的响应慢) slowlog命令格式如下

xxxxx> slowlog get 10
 3) 1) (integer) 411           
    2) (integer) 1545386469     
    3) (integer) 232663          
    4) 1) "keys"              
       2) "mecury:*"

图中各字段表示的是:

1=日志的唯一标识符

2=命令的执行时间点,以UNIX时间戳表示

3=查询命令执行时间,以微妙为单位,????中的是230ms

4=执行的命令,以数组的形式排列。完整的命令是 keys mucury:* 所以通过这些参数,基本可以确定,是突然有大量的keys *命令导致CPU负载升高,导致响应延迟,问题我们应用中没有开放keys *命令 问题解决

关于作者

我是小小,双鱼座的程序猿,我么下期再见~bye

END

「 往期文章 」

大礼包 | 来拿小程序大礼包啦!

WebSocket | 为什么你前后端推送不会用?因为你少了WebSocket的帮忙

Lombook | 你的代码真正元凶找到了:Lombook

扫描二维码

获取更多精彩

小明菜市场

来源:网络(侵删)

图片来源:网络(侵删)

你可能感兴趣的:(网络,redis,linux,java,运维)