Linux CPU性能监测
平均负载和 CPU 使用率
平均负载是指单位时间内的活跃进程数,也就是处于可运行状态®和不可中断状态(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
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
top的使用方法非常简单,直接执行就可以看到CPU的使用率