记一次线上HMS服务响应缓慢, Mysql持续CPU打满…
1 背景
凌晨持续接到线上报警: Mysql服务器iowait持续飙高不下。
该Mysql是对线上多个元数据MS提供服务,当务之急需要定位到造成故障的请求来源是哪个MS。
处理思路:
mysql在干嘛?
罪魁祸首是谁?
它在干嘛?
2 处理经过
2.1 mysql此刻在干嘛?
通过如下命令查看mysql进程:
1 | show processlist; |
发现大量 Creating sort index 状态,
这就很明确了,就是 Creating sort index 导致的iowait飙高,此时mysql会使用内存临时表来处理查询,在内存中进行排序,极端情况下还会将临时表数据写到磁盘,这将导致极大的mysql性能下降。是谁导致的呢?
2.2 罪魁祸首是谁?
罪魁祸首包含两个方面:一是哪个环境哪个服务?二是该系统请求在干什么?
哪个环境哪个服务?
如何查看请求来源及请求量?
下面的sql可以统计请求来源及当前链接数:
1 | select host, count(*) conn_num from (select substring_index(host, ':', 1) host from information_schema.processlist )t group by host; |
同样,我们可以查看Creating sort index
状态的请求来源及请求量:
1 | select host, count(*) conn_num from (select substring_index(host, ':', 1) host from information_schema.processlist where state = 'Creating sort index' ) t group by host; |
如此我们定位到最大的host来源,根据host来源我们可以定位到具体是来自哪个系统。
这里我们很快定位到具体的Hive环境,那么不禁要问它在干嘛呢?
该系统请求在干什么?
通过show all processlist
将进程详情抓取到文件,并根据数据特点抓取到可疑sql以及查询的数据特征,为后续排查提供线索。
1 | mysql -e "show all processlist" > process.info |
这里我们发现在查询某张表的分区信息,分区是元数据中存量最大的一张表,对该表的暴力查询往往带来很大的服务压力。为表述方便以及数据安全性,下面假定该表叫:dwd_driver
2.3 它在干嘛?
前面定位到了来源,以及一些sql特征。我们登陆对应的HIve环境,首先在HiveServer2服务日志中查看执行sql:
1 | -- 统计大分区查询数(part_num是我们内部版本对分区查询数量的审计日志信息) |
我们发现大量并发的关于该表的partition查询:
1 | show partitions dwd_driver partition(contry_code='beijing'); |
至此,初步定位到问题来源,下面开始故障排除。
2.4 处理方案
由于mysql服务持续iowait,已经造成大量请求查询缓慢,为尽快使服务恢复正常,采取牺牲暴力请求用户的任务来换取整体服务的稳定。决定 kill Creating sort index 进程。
2.4.1 快速批量生成kill指令
1 | -- 生成批量kill指令 |
2.4.2 kill Creating sort index 进程
上述kill命令可能需要循环持续执行多次, 并结合ganglia监控,直至iowait下降且服务恢复。
至此,故障排除完毕。至于根因,我们已经kill掉了用户请求,只等着第二天用户反馈进而主动暴露,然后分析业务场景以及提供优化方案即可。
3 总结
总mysql服务器iowait持续飙高的排查思路是:通过show processlist, show all processlist 命令以及进程表information_schema.processlist 定位到当前在做什么,然后定位到请求来源以及请求内容,进而排查到罪魁祸首,最后确定处理方案。
Ths
54686973 20617274 69636C65 20697320 64656469 63617465 6420746F 20526F6E 67657220 77686F20 49206465 65706C79 206C6F76 65642E
本文链接: https://stefanxiepj.github.io/archives/1e79ecb9.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)