记录一次服务器CPU负载高,利用率正常的处理方法

背景:

在一次查看服务器监控的时候偶然发现其中一台服务器的CPU负载很高,但是CPU利用率基本没有,通过top命令完全看不出来问题所在,经过一些思路的排查发现了原因并处理,现记录下来。

现象:

top命令查看:
top
作为CPU负载1分钟,5分钟,15分钟高达5,而且还持续的一两天的时间了(这里没显示是因为当时没截图)。
按照以前经验,cpu负载高而利用率不高,大概率是io导致的。因为io读写的瓶颈会导致CPU的长时间排队等待,造成负载高,CPU利用率反而不高,这项问题通常会体现在top命令里的wa上。但是,上面截图wa的利用率基本为0,这就很奇怪了,因此有了以下的排查思路。

排查思路:

既然top里的各项参数看起来完全正常,以我浅薄的知识量就想到了在top里看不到的参数,同时也是造成cpu问题的原因之一的上下文切换。
命令:
vmstat 1

这个命令我第一眼看的关键参数就是in,cs
in是每秒中断数
cs是上下文切换数量
第一眼看到这个数量是觉得挺多的,就在想会不会是这个导致的,于是开始寻找这上下文切换的进程是哪个,只要处理掉就可以解决了。
命令:
pidstat -wt 1
-w 是指显示进程的上下文切换情况
-t 是指同时显示进程下线程。
因为linux里面最小执行单位是线程,因此在要加一个-t参数才能显示完整。
在这里插入图片描述
经过一些过滤计算,发现是aliyundun这个进程占用的最多,但是这个服务是阿里云自带的防护进程,一般不会突然出问题。 不管三七二十一,先干掉再看。
然而事情没这么简单,负载依旧很高!有点没辙了,查各种资料,回头看vmstat下的参数发现r这项基本没有问题,都是低于CPU的核数,因此总结为不是多进程等待和切换导致的。 r是指等待运行的进程数。

然后就想到了是不是有不可中断进程,因为不可中断进程表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程,因此会一直占用CPU,不可中断是D,因此执行命令:
ps -A -ostat,ppid,pid,cmd|grep -e '^D'
发现有两个进程正处于这个状态,这两个都是很基础的命令,当时是因为其他原因导致的。杀掉进程后,果然负载降下来了,问题解决。

原因

不可中断进程导致CPU负载高,通过命令:
ps -A -ostat,ppid,pid,cmd|grep -e '^D'
找到进程,杀掉即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值