使用 mpstat 与 stress-ng 进行 CPU 性能监控
在日常系统维护与性能调优中,了解 CPU 的实时状态对于及时发现瓶颈和异常至关重要。本文将介绍两款常用工具——mpstat 和 stress-ng,并通过示例数据说明如何解读各项指标以及判断系统运行的健康状况。
一、工具简介
mpstat
mpstat 是 Linux 下的一个性能监控工具,可用于显示各个 CPU(或所有 CPU 汇总)的各项利用率指标。常用参数包括:
-P ALL
:显示所有 CPU 的详细信息- 后面的数字(例如
5
)表示采样间隔,即每 5 秒采集一次数据
stress-ng
stress-ng 用于对系统施加压力测试,比如在本例中我们通过以下命令对单个 CPU 核心施加 100% 的负载,持续 60 秒:
stress-ng --cpu 1 --cpu-load 100 --timeout 60
这有助于检测系统在高负载情况下各项指标的表现。
二、测试数据示例与初步分析
以下是采集到的部分 mpstat 输出数据(时间点 10:46:59 和 10:48:03):
10:46:54 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:46:59 AM all 36.56 0.00 10.81 0.92 0.00 3.65 1.43 0.00 0.00 46.64
10:46:59 AM 0 28.32 0.00 12.17 0.66 0.00 1.99 1.77 0.00 0.00 55.09
10:46:59 AM 1 26.05 0.00 13.25 0.66 0.00 2.43 1.77 0.00 0.00 55.85
10:46:59 AM 2 25.84 0.00 11.58 0.45 0.00 2.00 2.00 0.00 0.00 58.13
10:46:59 AM 3 27.78 0.00 12.00 1.11 0.00 2.22 1.56 0.00 0.00 55.33
10:46:59 AM 4 25.16 0.00 12.37 2.13 0.00 16.20 1.28 0.00 0.00 42.86
10:46:59 AM 5 24.62 0.00 14.47 1.08 0.00 2.38 1.51 0.00 0.00 55.94
10:46:59 AM 6 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:46:59 AM 7 28.88 0.00 11.64 1.29 0.00 2.16 1.51 0.00 0.00 54.53
从数据中可以观察到:
- 汇总(all)的用户态(%usr)和系统态(%sys)均处于较高水平,整体空闲时间(%idle)约 46.64%。
- 某些核心(如 CPU 6)在高负载测试下显示 100% 的用户态利用率,说明该核心正承受 100% 的负载。
- 其他核心的利用率相对均衡,但仍需要关注个别核心在长时间高负载情况下可能产生的瓶颈或调度不均问题。
三、各项指标解析与判断标准
以下是常用 mpstat 指标的定义及判断范围,便于在实际监控时进行快速判断:
指标 | 定义 | 正常范围 | 警告范围 | 错误范围 |
---|---|---|---|---|
%usr | 用户态运行时间 | < 80% | 80%-90% | > 90% |
%nice | 低优先级用户态运行时间 | < 5% | 5%-10% | > 10% |
%sys | 系统态运行时间 | < 20% | 20%-30% | > 30% |
%iowait | 等待 I/O 时间 | < 20% | 20%-30% | > 30% |
%irq | 处理硬件中断时间 | < 2% | 2%-5% | > 5% |
%soft | 处理软件中断时间 | < 5% | 5%-10% | > 10% |
%steal | 虚拟化环境资源竞争时间 | < 10% | 10%-20% | > 20% |
%guest | 运行访客操作系统的比例(虚拟化) | < 20% | 20%-50% | > 50% |
%gnice | 访客操作系统低优先级运行时间(虚拟化) | < 5% | 5%-10% | > 10% |
%idle | CPU 空闲时间 | 越高越好 | 无严格下限 | — |
此外,对于负载均衡,核心间差异应控制在 20% 以内为正常:
- 核心间差异 < 20%:正常
- 核心间差异 20%-40%:警告
- 核心间差异 > 40%:错误
如何解读这些指标?
- %usr + %sys:这两个指标的和代表了 CPU 在处理用户和系统任务上的工作量。若和超过 90%,则说明 CPU 负载较高,可能需要优化任务调度或扩展硬件资源。
- %iowait:反映 CPU 等待 I/O 操作完成的时间,较高的 iowait 可能表示存储或网络设备存在瓶颈。
- %steal:在虚拟化环境中尤为关键,若该值较高(超过 20%),说明虚拟机正在等待物理 CPU 资源。
- 负载均衡:通过比较各个核心的负载情况,如果某个核心与其他核心差异较大,则可能存在进程分布不均或特定任务占用单个核心的问题。
四、实际案例分析
在本案例中,通过 stress-ng 命令我们有意使一个 CPU 核心(如 CPU 6)处于满载状态:
- CPU 6:100% 的用户态负载,%idle 为 0,符合我们预期的高负载测试效果。
- 其他核心:虽然总体利用率适中,但从数据中仍可以观察到不同核心之间的细微差异,部分核心的用户态和系统态负载合计较高时需要注意是否有资源调度不均的问题。
通过对比 mpstat 的两组数据,我们可以看到在经过一段时间的压力测试后,各核心的利用率有一定波动,这时需要结合实际业务场景判断是否存在性能瓶颈,并考虑是否需要进行优化。
五、结论与建议
- 监控指标选择:在实际环境中,定期采集和对比 mpstat 指标有助于及时了解 CPU 的负载情况,特别是在虚拟化环境中,关注 %steal 值尤为重要。
- 负载均衡:确保各核心负载分布均衡,避免个别核心长时间处于高负载状态,可以通过任务调度策略进行优化。
- 综合分析:除了 CPU 指标外,还需要结合内存、磁盘 I/O 等其他指标进行综合分析,制定合理的性能优化方案。