Linux系统下CPU性能问题分析案例(上)
创始人
2025-07-08 03:30:34
0

关于CPU使用率相关重要指标,我们经常在使用top、dstat、vmstat等工具看到,这里解读一下:

  • user(通常缩写为us),代表用户态CPU时间。
  • nice(通常缩写为ni),代表低优先级用户态CPU时间,nice可取值范围是-20到19,数值越大,优先级反而越低,默认值是0。
  • system(通常缩写为sys),代表内核态CPU时间。
  • idle(通常缩写为id),代表空闲时间。注意,它不包括等待I/O的时间(iowait)。
  • iowait(通常缩写为wa),代表等待 I/O的CPU时间。
  • irq(通常缩写为hi),代表处理硬中断的CPU时间。
  • softirq(通常缩写为si),代表处理软中断的CPU时间。
  • steal(通常缩写为st),代表当系统运行在虚拟机中的时候,虚拟机占用的CPU时间。
  • guest(通常缩写为guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间。
  • guest_nice(通常缩写为gnice),代表以低优先级运行虚拟机的时间。

CPU的iowait突然升高,我该怎么处理?

分析过程

从上面的介绍可以看出,iowait升高,第一反应会想到查看系统的 I/O情况,I/O又分为磁盘I/O和网络I/O,这里先分析磁盘I/O。

1、运行 dstat 命令,观察 CPU 和 I/O 的使用情况

  • 结果分析。
  • 在iowait升高(wai)时,磁盘的读请求(read)都很高,最高时1271M。
  • 充分说明iowait的升高是磁盘I/O导致的,确切的说,是大量读磁盘导致的。

2、通过pidstat查询进程的I/O情况

# -d:统计进程的磁盘使用情况 1: 采集周期1s  10: 采集10次
pidstat -d 1 10

  • 结果分析。
  • 大量读磁盘的进程名称是app,而且app进程的pid在不停变化(短时进程?)

3、使用ps命令查看下app进程

  • 结果分析。
  • 进程的状态是Z+,命令行参数,进程变成僵尸进程了。
  • 僵尸进程的产生和处理方法,这里暂不展开,有想了解的可以评论留言或者自行学习。
  • app的是谁创建的,是下一步分析的重点。

4、查询app进程的父进程

  • 结果分析。
  • pid为51780的父进程id是51688,进程名称也是app。

5、使用perf命令采集性能事件分析app函数调用

# 录制全局性能事件,如果只想录制某个进程的,可以使用-p指定
# perf record -ag -p {pid} -- sleep 10 #采集指定pid所有cpu的性能事件,周期是10s
perf record -g

# 分析报告
perf report

  • 分析结果。
  • app进程正在对磁盘进行直接读,也就是绕过了系统缓存,每个读请求都会从磁盘直接读。

思路总结

  • 使用dstat命令查看系统I/O情况(dstat可以同时观察cpu和磁盘的情况)。
  • 使用pidstat命令可以定位到进程维度的磁盘读写情况,找出可疑进程。
  • 使用ps、top等命令可以观测到进程的状态(D、R、S、Z、T等)。
  • 使用pstree命令我们找出了app进程的父进程(子进程的pid一直在变)。
  • 使用perf命令就可以对进程的函数调用关系分析了。
  • 没啥需要使用的啦。哈哈,点赞+收藏。

知识补充

进程状态

  • R 是Running或Runnable 的缩写,表示进程在CPU的就绪队列中,正在运行或者正在等待运行。
  • D 是Disk Sleep的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
  • Z 是Zombie的缩写,进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
  • S 是Interruptible Sleep的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入R状态。
  • I 是Idle的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。
  • T 或者 t,也就是Stopped或Traced的缩写,表示进程处于暂停或者跟踪状态。

僵尸进程

  • 一旦父进程没有处理子进程的终止,还一直保持运行状态,那么子进程就会一直处于僵尸状态。
  • 大量的僵尸进程会用尽PID进程号,导致新进程不能创建。
  • 僵尸进程在父进程回收它的资源后就会消亡,或者在父进程退出后,由init进程回收后也会消亡。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...