linux nfs load average 高怎么排查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux nfs load average 高怎么排查相关的知识,希望对你有一定的参考价值。

先在主机上通过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时会减少这样的操作,增加进程的处理速度。这个对老的程序调优时比较有效。
参考技术A 非常多的df -h进程没有退出。于是手工kill掉这些 df -h进程。cpu load恢复正常。
至于为什么会有这么多 df -h进程,给出的解释是:挂了NFS,之前没有umount干净,所以有df -h进程本回答被提问者采纳

Linux 突然很占cpu load average 很高!!!

整个的系统没动,前两天还是很好的。但是这几天,linux突然很慢的感觉。而且,cpu使用率飙升!! 找了很久,仍然找不到答案。 load averag 伴随着也会很高。 这种情况程周期性性出现。 每次都出现一天到两天。 不知道为什么~~ 希望大侠能给点帮助

1、先使用top看下CPU占用高的进程,找出进程的进程ID(pid);
查看方法:top
2、根据进程ID(pid)查看是进程的那些线程占用CPU高。
查看方法:top -Hp pid
3、使用pstack,查看CPU占用高的线程在干什么。
查看方法:pstack pid
4、根据pstack分析,应该可以看出问题所在。
参考技术A 到终端,输入top,查看最占资源的线程。 参考技术B 你用得是哪一款雷尼克斯,我怎么下载的没有一个能用的。

以上是关于linux nfs load average 高怎么排查的主要内容,如果未能解决你的问题,请参考以下文章

linux抓取load average数据

linux load average

理解LINUX LOAD AVERAGE的误区

Linux 平均负载 Load Average 详解

linux 平均负载 load average 的含义

深入理解 Linux Load Average