平均负载是指单位时间内的活跃进程数,也就是处于可运行状态®和不可中断状态(D)的进程数。不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。可以参考这篇笔记。
CPU使用率是指单位时间内CPU繁忙情况的统计,与平均负载并不是一个东西。
CPU使用率为100%时,是指换算成单个CPU的情况下使用率是100%,如果是多核的话,这并不是总的CPU使用率,所以此时即使100%也问题不大。实际上对于一个8核CPU其使用率最高是800%。一个进程内有多个线程的话,它的CPU使用率是这些线程的使用率总和,因此CPU使用率可能会超过100%。
大量进程执行CPU密集型操作:平均负载会升高,CPU使用率也会升高。
大量进程执行IO密集型操作:等待的进程也会引起平均负载比较高,但CPU使用率却比较低。
大量进程拥塞等待调度:平均负载很升高,CPU使用率也会比较高。
stress - tool to impose load on and stress test systems
`stress’ imposes certain types of compute stress on your system
Linux 系统压力测试工具,可模拟平均负载升高的场景。
常用参数:
-c, --cpu N
—— spawn N workers spinning on sqrt(),可用于模拟CPU密集型进程-i, --io N
—— spawn N workers spinning on sync(),可用于模拟I/O密集型进程-m, --vm N
—— spawn N workers spinning on malloc()/free(),模拟频繁的堆内存申请与释放-t, --timeout N
—— timeout after N seconds,运行时间(秒)CPU密集型进程模拟
stress --cpu 1 --timeout 600
IO密集型进出程模拟
stress -i 1 --timeout 600
大量进程同时运行模拟
stress -c 4 -i 4 --timeout 600
例如: 执行stress -c 4 -i 4 --timeout 600
后,在另一个终端执行uptime
,过一会儿后可以看到平均负载明显上升,趋近于8,与8个进程同时运行一致:
$ uptime
12:18:54 up 14:28, 1 user, load average: 7.95, 5.10, 2.23
主要包括top
、mpstat
、pidstat
top的使用方法非常简单,直接执行就可以看到CPU的使用率(%CPU)、平均负载(load average)、进程占用CPU和内存等资源的情况。
启动后按下大写的H
可以查看各个进程中具体线程的情况。或者直接只查看指定进程中各线程的情况:
top -Hp
mpstat - Report processors related statistics.
Usage: mpstat [-P {cpu|ALL}] [internal [count]]
EXAMPLES:
mpstat 2 5
Display five reports of global statistics among all processors at two second intervals.
mpstat -P ALL 2 5
Display five reports of statistics for all processors at two second intervals.
mpstat
对/proc/stat文件中存放的CPU统计信息进行监控,不但能查看所有CPU的平均使用信息,还能查看某个特定CPU的信息。
常用参数:
参数 | 含义 |
---|---|
-P {cpu l ALL} | 监控哪个CPU,在[0,cpu个数-1]中取值,ALL为所有CPU |
internal | 相邻的两次采样的间隔时间 |
count | 输出采样的次数,count需要和internal一起使用 |
不带任何参数 | 输出为从系统启动以来的平均值 |
示例:
$ mpstat -P ALL 5 3 # 本机CPU2个核
Linux 5.4.0-89-generic (100ask) 11/02/2021 _x86_64_ (2 CPU)
12:38:36 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:38:41 PM all 51.40 0.00 48.60 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:41 PM 0 76.00 0.00 24.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:41 PM 1 26.80 0.00 73.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:38:46 PM all 50.85 0.00 49.15 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:46 PM 0 74.85 0.00 25.15 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:46 PM 1 26.95 0.00 73.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:46 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:38:51 PM all 51.45 0.00 48.55 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:51 PM 0 75.75 0.00 24.25 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:38:51 PM 1 27.20 0.00 72.80 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 51.23 0.00 48.77 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 0 75.53 0.00 24.47 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 1 26.98 0.00 73.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出参数含义:
输出参数 | 含义 |
---|---|
%usr | 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负的进程 |
%nice | 在internal时间段里,nice值为的负进程的CPU时间(%) |
%sys | 在internal时间段里,内核态运行时间(%) |
%iowait | 在internal时间段里,硬盘I/O等待时间(%) |
%irq | 在internal时间段里,硬中断时间(%) |
%soft | 在internal时间段里,软中断时间(%) |
%idle | 在internal时间段里,CPU除去等待I/O操作外的闲置时间(%) |
pidstat - Report statistics for Linux tasks.
Usage: pidstat [option] interval [count]
EXAMPLES
pidstat 2 5
Display five reports of CPU statistics for every active task in
the system at two second intervals.
pidstat -r -p 1643 2 5
Display five reports of page faults and memory statistics for PID
1643 at two second intervals.
pidstat -C "fox|bird" -r -p ALL
Display global page faults and memory statistics for all the pro‐
cesses whose command name includes the string "fox" or "bird".
pidstat -T CHILD -r 2 5
Display five reports of page faults statistics at two second
intervals for the child processes of all tasks in the system.
Only child processes with non-zero statistics values are dis‐
played.
常用参数:
参数 | 含义 |
---|---|
-u | 显示CPU相关的性能指标 |
-w | 显示上下文切换详细情况 |
-t | 查看线程信息,默认是进程的 |
-d | 显示磁盘 I/O 统计数据 |
-r | 显示内存使用情况及缺页错误信息 |
-p | 指定要查看的进程号 |
-C | 用于筛选出命令行包含关键字的进程 |
示例:
先在一个终端启用stress,然后另一个终端执行pidstat -C "stress" -urdw 5 2
$ pidstat -C "stress" -urdw 5 2
Linux 5.4.0-89-generic (100ask) 11/02/2021 _x86_64_ (2 CPU)
=========↓CPU参数↓
01:11:01 PM UID PID %usr %system %guest %wait %CPU CPU Command
01:11:06 PM 1001 10439 99.80 0.00 0.00 0.40 99.80 1 stress
01:11:06 PM 1001 10440 2.00 97.01 0.00 1.20 99.00 0 stress
=========↓内存使用情况及缺页错误信息↓
01:11:01 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command
=========↓磁盘IO情况↓
01:11:01 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
=========↓上下文切换参数↓
01:11:01 PM UID PID cswch/s nvcswch/s Command
01:11:06 PM 1001 10439 0.00 17.37 stress
01:11:06 PM 1001 10440 1.60 63.27 stress
01:11:06 PM UID PID %usr %system %guest %wait %CPU CPU Command
01:11:11 PM 1001 10439 99.00 0.00 0.00 0.80 99.00 1 stress
01:11:11 PM 1001 10440 2.20 96.20 0.00 1.20 98.40 0 stress
01:11:06 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command
01:11:06 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
01:11:06 PM UID PID cswch/s nvcswch/s Command
01:11:11 PM 1001 10439 0.00 17.60 stress
01:11:11 PM 1001 10440 1.00 66.80 stress
Average: UID PID %usr %system %guest %wait %CPU CPU Command
Average: 1001 10439 99.40 0.00 0.00 0.60 99.40 - stress
Average: 1001 10440 2.10 96.60 0.00 1.20 98.70 - stress
Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command
Average: UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
Average: UID PID cswch/s nvcswch/s Command
Average: 1001 10439 0.00 17.48 stress
Average: 1001 10440 1.30 65.03 stress
常用输出参数释义:
%wait
进程等待CPU的时间minflt/s
每秒产生的次缺页错误次数(minor page faults)。所谓次缺页错误次数就是指虚拟内存地址映射成物理内存地址产生的page fault次数majflt/s
每秒产生的主缺页错误次数(minor page faults)。所谓主缺页错误次数就是虚拟内存地址映射成物理内存地址时,相应的page在swap区VSZ
进程使用的虚拟内存(单位kB)RSS
进程使用的物理内存(单位kB)%MEM
使用的有效内存比例。有效内存的英文品一下:The tasks's currently used share of available physical memory.
kB_rd/s
每秒从磁盘读出多少KBkB_wr/s
每秒写入多少KB到磁盘,包括已经写入和将要写入cswch/s
每秒自愿上下文切换nvcswch/s
每秒非自愿上下文切换