load过高但是cpu占用率低的排查
过程描述
- 某天晚上,短信受到报警,说mongodb服务器cpu load过高;
- 登录到线上一看,使用top命令,发现load到了12(db服务器是4核)但是cpu占用率很低,当时就很疑惑;因为我之前一直以为load高,一定是cpu繁忙造成的,cpu占用应该很大才对
-
再看了看top输出,cpu 的wait很高,经常持续在95%左右,查阅了资料,猜想是io过高
-
使用vmstat 2 5命令,查看io的情况。
bi和bo这一项,显示的就是服务器读写磁盘的情况,我对比了未报警正常的dbserver,明显偏高
- 这个时候,需要看到各个进程读写磁盘的情况。网上搜索了一下,有一个iotop的工具,可以做到。执行需要sudo权限。正在我准备安装的时候,发现load降下去了,另外一个同事干掉了一个进程,他解释说,看见这个进程的日志有很多错误。现场没了。囧
其它
- iotop的输出第一个名字是tid,我验证了一下,tid就是pid。网上搜索了一下,也验证了这个。