Linux分析CPU性能问题

1.1. CPU 使用率
CPU 使用率描述了非空闲时间占总 CPU 时间的百分比,根据 CPU 上运行任务的不同,又被分为用户 CPU、系统 CPU、等待 I/O CPU、软中断和硬中断等。

用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高,通常说明有应用程序比较繁忙。
系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断)。系统 CPU 使用率高,说明内核比较繁忙。
等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比。iowait 高,通常说明系统与硬件设备的 I/O 交互时间比较长。
软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。
除了上面这些,还有在虚拟化环境中会用到的窃取 CPU 使用率(steal)和客户 CPU 使用率(guest),分别表示被其他虚拟机占用的 CPU 时间百分比,和运行客户虚拟机的 CPU 时间百分比。
1.2. 性能指标归纳

 

 


2. 性能工具使用思路
2.1 根据指标找工具
第一个维度,从 CPU 的性能指标出发
当你要查看某个性能指标时,要清楚知道哪些工具可以做到,然后根据不同的性能指标,使用对应的性能工具。

 

 


2.2 根据工具查指标
第二个维度,从工具出发。
知道每个工具能提供哪些指标,然后运行工具获取指标并进行分析。

常用工具汇总如下:

 

 


3. 如何迅速分析 CPU 的性能问题
虽然 CPU 的性能指标比较多,但不是完全孤立的,很多指标间都有一定的关联。想弄清楚性能指标的关联性,就要通晓每种性能指标的工作原理。

比如 top 的输出,如果用户 CPU 使用率高,就应该使用 pidstat 去排查进程的用户态而不是内核态。因为用户 CPU 使用率反映的就是用户态的 CPU 使用情况,而内核态的 CPU 使用情况只会反映到系统 CPU 使用率上。

遇到CPU性能问题时,为了缩小排查范围,首先运行几个支持指标较多的工具

top
vmstat
pidstat

 

 

这张图里列出了 top、vmstat 和 pidstat 分别提供的重要的 CPU 指标,并用虚线表示关联关系,对应出了性能分析下一步的方向。

这三个命令,包含了大部分重要的 CPU 性能指标:

从top 的输出可以得到各种 CPU 使用率以及僵尸进程和平均负载等信息。
从 vmstat 的输出可以得到上下文切换次数、中断次数、运行状态和不可中断状态的进程数。
从 pidstat 的输出可以得到进程的用户 CPU 使用率、系统 CPU 使用率、以及上下文切换情况。
另外,这三个工具输出的很多指标是相互关联的,用虚线表示了它们的关联关系,通过输出结果的对比,可以快速定位CPU性能问题。举两个简单例子:
第一个例子,当发现 top 输出的用户 CPU 使用率有问题时,可以跟 pidstat 的输出做对比,观察是否是某个进程导致的问题。
而找出导致性能问题的进程后,就要用进程分析工具来分析进程的行为,比如使用 strace 分析系统调用情况,以及使用 perf 分析调用链中各级函数的执行情况。

第二个例子,top 输出的平均负载升高,可以跟 vmstat 输出的运行状态和不可中断状态的进程数做对比,观察是哪种进程导致的负载升高。

如果是不可中断进程数增多了,那么就需要做 I/O 的分析,也就是用 dstat 或 sar 等工具,进一步分析 I/O 的情况。
如果是运行状态进程数增多了,那就需要回到 top 和 pidstat,找出这些处于运行状态的到底是什么进程,然后再用进程分析工具,做进一步分析。
-----------------------------------
Linux-分析CPU性能问题
https://blog.51cto.com/u_437549/5022955

posted @ 2023-04-10 14:48  羊脂玉净瓶  阅读(291)  评论(0)    收藏  举报