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

问题

生产上有台服务器(4核16G)平均负载特别高(load average达到490+),CPU使用率很低,同时内存,IO都比较低,网络连接状态也没异常。当负载很大时,应用服务器无法应答F5的健康检测,导致F5认为服务宕掉,交易进不来。重启应用后交易恢复,当时很快平均负载会很快上来。

名词解释

平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
等待 CPU 的进程已经在 CPU 的就绪队列中,处于运行状态;
而等待 I/O 的进程则处于不可中断状态。

问题分析

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

 

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

 由上图可以看出有两个进程每秒上下文切换比较大,通过top命令(或ps)查看这两个进程,如下图

 

查看到这两个进程的USER都是root用户,排除应用程序的问题,其中23364进程是NAS(Network Attached Storage:网络附属存储)的相关进程,之前生产上出现过应用服务器可以查看到挂载的NAS里的目录,但是无法读写NAS上的文件的问题。

应用程序会读写NAS保存文件,初步判断可能是由该原因引起,登录该服务器尝试着去新建文件,发现命令hang住卡死,无法新建。

解决问题

停止应用程序,重挂NAS后启动应用程序,交易恢复正常,平均负载没在升高。

改进措施

1.后续了解到RedHat7.4版本在挂载NAS的时候存在BUG,需用vers=3挂载,在/etc/rc.local文件中mount修改如下:

mount -o vers=3,nolock unity-nas:/** /** &

2.增加应用服务器对NAS上文件读写检测,在NAS上新建一文件,尝试去读写。


参考博文:http://www.361way.com/linux-context-switch/5131.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值