linux中进程上下文频繁切换导致loadaverage过高处理在linux中进程上下文频繁切换导致loadaverage过高问题我们要如何来解决呢,今天小编来为各位介绍一下此问题的解决办法
现网有两台虚拟机主机95%的cpu处于idle状态,内存使用率也不是特别高,而主机的loadaverage达到了40多
先在主机上通过top、free、ps、iostat等常用工具分析了下主机的CPU、内存、IO使用情况,发现三者都不高
通过vmstat1查看的结果如下:从vmstat的输出结果来看,io项的blockin和blockout并不频繁
而system项的每称的中断数(in)、每秒的上下文切换(cs)特别频繁
这就造成loadavaerage会特别高
大方向上的根因找到了,具体是哪个进程如何频繁的进行中断和上下文件的切换呢
这里使用pidstat-w1(每秒刷新输出上下文切换情况),输出见下图:从上图中可以看到有cswch(自愿的上下文切换)和nvcswch(非自愿的上下文切换)及对应的命令,出vsftpd占用的文件交换比较多
可以看到这里显示的cs值和总值还是有比较大的差距,由于主机上启动了不止一个vsftpd进程,而且pidstat通过1秒刷新的时候并不会显示所有,通过pidstat-w执行几次收集所有发现所有的vsftpd进程占用的cs值叠加和vmstat里的比较相近了
将结果通知业务人员后,和业务人员的猜测也一致,由于ftp使用的目录结构层次较深、文件数也比较多,业务在备份老的使用目录并重新创建单层目录后,观察一段后,发现loadaverage降下来了,稳定在1以下
当然这里只是处理方法的一种,现网中有些程序不好进行这样的修改的,又不让让进程在cpu之间频繁切换的,也有通过设置固定运行的CPU上进行调优的方法,如下两个进程运行在0-7号cpu上:[root@www~