背景
线上系统突然就死掉, top 查看负载超高,应用服务不得不进行重启缓解1-5分钟的生存机会。
环境
阿里云数据库 16c32g + 应用服务器8c16g
排查流程
-
初步使用jstack进行线程数据抓取,获取部分消息,只得知应用在等待redis的锁。
- 于是将部分使用redis锁的地方放开,问题仍旧。
- 查询redis应用cpu 发现时不是到达100%, 大家都知redis是单线程内存任务执行,于是进行查询慢 redis慢sql
redis-cli -a **** SLOWLOG GET得到大量的big keys .大量的同时大批量写数据, 解决到big keys 问题仍在。cpu 还时不时的达到100% 。 - 于是将自建单体redis 迁到阿里云 高可用集群模式下,问题仍在。
-
经过上面的redis 的排查,基本上可以确定不是redis的问题。 于是只能排查mysql .使用的阿里云的云数据库mysql, 查看只能去它提供的看板上查看,在上面看到有慢sql ,
看板做的真的是体验太差,也许是我不会看 强烈建议在程序中开启慢sql的打印 -
在程序里开慢sql 打印后,有针对性的去解决每一条慢sql ,这样会相对应的程序节点,在哪里使用慢sql , 剩下的就是慢sql 的优化
-
经过慢sql优化与 大表数据处理, 应用系统回到原来的平静。
附
# druid数据源开启慢sql
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall: