wmiprvse wmiprvse占用cpu过高
Linux 性能优化:深入解析 CPU 使用率
本文将引导您了解 Linux 系统性能管理,尤其是关于 CPU 使用率的关键细节。
Linux 时间基础:节拍率与 Jiffies
为了维护 CPU 时间,Linux 操作系统采用了一个预先定义的节拍率(内核中表示为 HZ),该节拍率通过时间中断触发,并使用全局变量 Jiffies 来记录系统开机以来的节拍数。每发生一次时间中断,Jiffies 的值就会加一。HZ 是内核的可配置选项,不同系统可能设置不同的值。用户空间程序无法直接访问这个值,但内核提供了一个用户空间节拍率 USERHZ,始终固定为 100。
Linux 通过 /proc 虚拟文件系统向用户空间提供系统内部状态信息,包括 /proc/stat,它提供了 CPU 和任务统计信息。
解析 /proc/stat 的输出
输出结果是一个表格,其中第一列表示 CPU 编号,如 cpu0、cpu1,而第一行没有编号的 cpu 表示所有 CPU 的累加。其他列表示不同场景下 CPU 的累加节拍数,单位是 USER_HZ,即 10 ms(1/100 秒)。这些列实际上代表了不同场景下的 CPU 时间。
user(us):用户态 CPU 时间,不包括 nice 时间,但包括 guest 时间。
nice(ni):低优先级用户态 CPU 时间,即进程的 nice 值被调整时的 CPU 时间。
system(sys):内核态 CPU 时间。
idle(id):空闲时间,但不包括等待 I/O 的时间。
iowait(wa):等待 I/O 的 CPU 时间。
以及其他如 irq、softirq、steal、guest 和 guest_nice 等指标,它们都是 CPU 使用率相关的重要数据。
性能分析工具
top 和 ps:是最常用的性能分析工具。top 显示了系统总体的 CPU 和内存使用情况以及各个进程的资源使用情况,而 ps 则只显示每个进程的资源使用情况。在 top 的输出中,你可以通过按下数字 1 来切换到每个 CPU 的使用率显示。
pidstat:一个专门分析每个进程 CPU 使用情况的工具,它可以展示进程的实时 CPU 使用率。
perf:是一个强大的性能分析工具,可以实时显示占用 CPU 时钟最多的函数或指令。perf top 类似于 top,能实时显示占用 CPU 资源最多的符号(如函数或指令)。而 perf record 和 perf report 则用于记录和报告性能数据,便于后续分析。
如何定位问题
若要确定是 php-fpm 的哪个函数导致了 CPU 使用率升高,可以使用 perf 进行深入分析。在运行 perf 命令时,它将展示占用 CPU 时钟最多的函数或指令,帮助您定位性能瓶颈。
总结