Linux--常见问题:LOAD高但是CPU和IO都很低问题解决

Linux--常见问题:LOAD高但是CPU和IO都很低问题解决,第1张

正常情况下我们在发现Load 过高时都会去查询几个方向

按上面情况查询基本上99%的都能查出问题所在,但是剩余1%特殊情况确无法判断出来

下面介绍下剩余1%中的一种相对常见的情况。

查看一下进程的状态:

# top -H

# shift+o =选择w (按照状态排序)

# R(排序)

结果发现一近十个find和其它进程的状态是D(uninterruptible sleep)。

再看看进程,该机器挂了nfs,因此应该是大耗时 *** 作挂载盘的结果

1,一般这种情况想立刻解决可以直接重新mount这些盘使这些IO *** 作失败中断。

2, 强制卸载目录 umount -f 目录

注:使用-f 参数进行强制卸载时一般建议等一会儿,一些情况下处理需要1-2分钟的时间。

3,使用umount -f,问题依旧。使用fuser命令,先确认有那些进程在占用该目录

# fuser -cu 目录 查询关联应用

# fuser -ck 目录 强制卸载

先在主机上通过top、free、ps、iostat 等常用工具分析了下主机的CPU、内存、IO使用情况,发现三者都不高。通过vmstat 1 查看的结果如下:

context switches

从vmstat的输出结果来看,io项的block in 和block out 并不频繁。而system项的每称的中断数(in)、每秒的上下文切换(cs)特别频繁。这就造成load avaerage会特别高。大方向上的根因找到了,具体是哪个进程如何频繁的进行中断和上下文件的切换呢?

这里使用pidstat -w 1 (每秒刷新输出上下文切换情况),输出见下图:

context switches

从上图中可以看到有cswch(自愿的上下文切换)和nvcswch(非自愿的上下文切换)及对应的命令, 出vsftpd占用的文件交换比较多。可以看到这里显示的cs 值和总值还是有比较大的差距,由于主机上启动了不止一个vsftpd进程,而且pidstat 通过1秒刷新的时候并不会显示所有,通过pidstat -w执行几次收集所有发现所有的vsftpd进程占用的cs值叠加和vmstat里的比较相近了。

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

当然这里只是处理方法的一种,现网中有些程序不好进行这样的修改的,又不让让进程在cpu之间频繁切换的,也有通过设置固定运行的CPU上进行调优的方法,如下两个进程运行在0-7号cpu上:

[root@www ~]# taskset -c -p 6389

pid 6389's current affinity list: 0-7

[root@www ~]# taskset -c -p 6580

pid 6580's current affinity list: 0-7

可以通过taskset让其固定在0-1号cpu上运行:

[root@www ~]# taskset -c 0,1 -p 6389

这样做的原理是每当进程在切换到下一个cpu core上进会flush当前的cache数据,指定CPU时会减少这样的 *** 作,增加进程的处理速度。这个对老的程序调优时比较有效。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7338863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存