系统平均负载
简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进行数(ps命令看到的处于R状态Running或Runnable),也就是平均活跃进程数,它和CPU使用率没有直接关系。不可中断状态的进程是指那些正处于内核态关键流程中的进程,并且这些流程是不可打断的(ps命令看到的D状态Uninterruptible Sleep,也称Disk Sleep),比如最常见的是等待硬件设备的I/O响应。不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
uptime命令最后三个数字,依次表示过去1分钟、5分钟、15分钟的平均负载。
如何理解uptime这些数字,假设机器的CPU个数为1,而此时平均负载是1。表示当前平均的活跃进程数是1,也就意味着CPU刚好被完全占用;如果CPU个数是2,则意味着CPU有50%的空闲。
可通过下面命令查看系统CPU个数:
grep 'model name' /proc/cpuinfo | wc -l
平均负载和CPU使用率
CPU使用率,是单位时间内CPU繁忙情况的统计,跟平均负载不一定完全对应;平均负载不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程。
- CPU密集型进程,使用大量CPU会导致平均负载升高,此时这两者是一致的;
- I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定高;
- 大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。
工具使用
工具包:stress
,sysstat
。
stress是一个linux压力测试工具,可以用于模拟进程异常导致平均负载升高的场景。
sysstat包含常用的linux性能工具,可用来监控和分析系统的性能。常用的主要有mpstat和pidstat两个命令。
- mpstat 是一个常用的多核CPU性能分析工具,用来实时查看CPU性能指标。
- pidstat 是一个常用的进程性能分析工具,用来实时查看进程的CPU、内存、I/O以及上下文切换等性能指标。
常用命令:
模拟一个CPU使用率100%的场景:
stress --cpu 1 --timeout 30
模拟I/O压力,不停地执行sync:
stress -i 1 --timeout 30
模拟运行进程数超过CPU运行能力,出现等待CPU的进程:
stress -c 8 --timeout 30
查看CPU使用率的变化情况, -P ALL表示监控所有CPU,5 表示每隔5s打印一次
mpstat -P ALL 5
pidstat查看进程占用CPU(-u)、I/O(-d)、内存(-r)
可使用-p指定进程号
pidstat -u 5
网友评论