linux系统进程上下文频繁切换导致load average过高

进程上下文频繁切换导致load average过高

现象

最近发现有台虚拟机主机95%的cpu处于idle状态,内存使用率也不是特别高,而主机的load average很高

问题分析

先在主机上通过top、free、ps、iostat 等常用工具分析了下主机的CPU、内存、IO使用情况,发现三者都不高。通过vmstat 1 查看的结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zVes6qbQ-1601031023096)(http://10.152.160.36/server/index.php?s=/api/attachment/visitFile/sign/f20d8c84e7210a03e90076e140e06c2a&showdoc=.jpg)]

从vmstat的输出结果来看,io项的block in 和block out 并不频繁。而system项的每称的中断数(in)、每秒的上下文切换(cs)特别频繁。这就造成load avaerage会特别高。大方向上的根因找到了,具体是哪个进程如何频繁的进行中断和上下文件的切换呢?
通过promethues监控再次印证:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ouX2kWWR-1601031023099)(http://10.152.160.36/server/index.php?s=/api/attachment/visitFile/sign/a9ee126bf916db9b4ca3ad4d33a1fe74&showdoc=.jpg)]
这里使用pidstat -w 1 (每秒刷新输出上下文切换情况),输出见下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRGDST4D-1601031023100)(http://10.152.160.36/server/index.php?s=/api/attachment/visitFile/sign/1e78306d9005208cdfd9e1991369053f&showdoc=.jpg)]
从上图中可以看到有cswch(自愿的上下文切换)和nvcswch(非自愿的上下文切换)及对应的命令, 出vsftpd占用的文件交换比较多。可以看到这里显示的cs 值和总值还是有比较大的差距,由于主机上启动了不止一个vsftpd进程,而且pidstat 通过1秒刷新的时候并不会显示所有,通过pidstat -w执行几次收集所有发现所有的vsftpd进程占用的cs值叠加和vmstat里的比较相近了。

后记

将结果通知业务人员后,由于ftp使用的目录结构层次较深、文件数也比较多,业务在备份老的使用目录并重新创建单层目录后,观察一段后,发现load average降下来

猜你喜欢

转载自blog.csdn.net/qq_31555951/article/details/108802336
今日推荐