• 记录一次服务器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'
    找到进程,杀掉即可。

  • 相关阅读:
    批量翻译文本文档终极指南
    Ubuntu系统下挂载共享文件夹的操作
    python - excel 设置样式
    哪个版本的JVM最快?
    Go----方法和函数的区别
    管易云与网易互客对接集成发货单查询2.0连通编辑订单(管易包裹物流=>互客销售订单物流(修改)V1)
    axios在vue中的应用
    正则系列之字符类
    将 Ordinals 与比特币智能合约集成:第 2 部分
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter1-初始 Linux Shell
  • 原文地址:https://blog.csdn.net/mao2553319/article/details/127880319