Linux系统下CPU性能问题分析案例

关于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 的使用情况
Linux系统下CPU性能问题分析案例

文章插图
  • 结果分析 。
  • 在iowait升高(wai)时,磁盘的读请求(read)都很高 , 最高时1271M 。
  • 充分说明iowait的升高是磁盘I/O导致的,确切的说,是大量读磁盘导致的 。
2、通过pidstat查询进程的I/O情况# -d:统计进程的磁盘使用情况 1: 采集周期1s10: 采集10次pidstat -d 1 10
  • 1.
  • 2.

Linux系统下CPU性能问题分析案例

文章插图
  • 结果分析 。
  • 大量读磁盘的进程名称是App , 而且app进程的pid在不停变化(短时进程?)
3、使用ps命令查看下app进程
Linux系统下CPU性能问题分析案例

文章插图
  • 结果分析 。
  • 进程的状态是Z+,命令行参数<defunct>,进程变成僵尸进程了 。
  • 僵尸进程的产生和处理方法 , 这里暂不展开,有想了解的可以评论留言或者自行学习 。
  • app的是谁创建的,是下一步分析的重点 。
4、查询app进程的父进程
Linux系统下CPU性能问题分析案例

文章插图
  • 结果分析 。
  • pid为51780的父进程id是51688,进程名称也是app 。
5、使用perf命令采集性能事件分析app函数调用# 录制全局性能事件,如果只想录制某个进程的,可以使用-p指定# perf record -ag -p {pid} -- sleep 10 #采集指定pid所有cpu的性能事件,周期是10sperf record -g# 分析报告perf report
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Linux系统下CPU性能问题分析案例

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