Linux 系统CPU使用率变高,但找不到占用CPU的应用,如何进行排查

计算操作系统技术服务知识库
问题描述

当发现系统的CPU使用率很高,但并没有找到占用CPU较高的进程时,如何进行排查

问题分析

当使用top观察到整体CPU使用率很高,但找不到占用CPU较高的进程时,可以考虑进程不断重启或者短时进程导致的问题。

解决方案

1、先用top查看机器的整体状况,如下: 图片 可以发现整体系统CPU使用率偏高:用户CPU使用率(us)已经到了 82.1%,系统 CPU 为 15.2%,而空闲 CPU (id)则只有 1.7%。 但是从进程列表可以看出,CPU使用率最高的进程只有2.7%。 分析进程列表:

  • nginx 运行web服务占用2.7%正常
  • php-fpm 运行php程序,占用2%左右正常
  • containerd跟docker 运行容器,占用%1左右正常

使用top并没有找到占用CPU高的进程。 2、继续使用pidstat进行分析,如下: 图片 我们发现,所有进程的CPU使用率也并不高,使用率高的Docker、 Containerd、Nginx、php-fpm 最高也只有3%左右,所有进程的 CPU 使用率之和不过24%左右。 并没有找到占用CPU较高的进程。 3、再观察下top的输出,如下: 图片 我们可以发现,在Tasks一行,有6个处于running队列的进程,然后再看进程列表中处于R状态的进程,我们发现为stress进程,并不是前面用top看到的进程。 4、然后我们使用pidstat观察上述stress进程,如下: 图片 并没有发现此进程,使用ps进行查询,同样查询不到此进程,如下: 图片 我们可以确认此进程已经不存在,但继续使用top进行查看,CPU占用率升高的问题依然存在。而且stress进程PID发生变化。 持续观察一会,我们发现stress进程的PID在不断变化。 进程PID不断变化,可能由于进程不断重启或者短时进程。 我们继续使用pstree来进行查看,查找stress进程的父进程,如下: 图片 我们可以看到stress进程是php-fpm的子进程。 至此,我们找到了stress的父进程php-fpm。我们可以推测php-fpm不断拉起stress子进程,然后stress进程由于某种原因不断结束。 接下来便可调查父进程php-fpm应用程序内部原因,确定stress进程不断启动跟停止的原因。 5、对于不断重启的进程,我们可以使用execsnoop进行查看,如下: 图片 我们可以发现,stress进程不断启动。 如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论