一. 上节回顾
1. 什么是进程?什么是线程?它们之间的区别?
2. CPU命令
查看物理CPU的个数
查看每个物理CPU的核数
查看逻辑CPU的个数
3. CPU架构
从处理器层面查看
从操作系统层面查看
4. uptime
load average:三个负载的含义
平均负载和CPU使用率
5. 场景一:CPU密集型进程
二. 场景二:I/O密集型进程
1. 在第一个终端里运行
stress -ng -i 1 --hdd 1 --timeout 600 #hdd表示读写临时文件 或者 stress -i 1 --timeout 600 或者stress -d 1 -t 600
2. 在第二个终端里运行
watch -d uptime
3. 在第三个终端里使用mpstat查看CPU使用率的变化情况
mpstat -P ALL 5
在运行的过程中,1分钟的平均负载会慢慢不断升高,其中一个CPU使用率升高超过90%以上,iowait也很高,说明平均负载的升高是由于iowait的升高导致的
4. 查看是哪个进程导致的
pidstat -u 5 1
stress -ng -hdd
三. 场景三:大量进程的场景
当系统中运行进程超出CPU运行能力时,是不是出现等待CPU的进程情况
1. 在第一个终端中模拟12个进程
stress -c 12 --timeout 600
由于系统只有4个CPU,明显比12个进程要少得多,因此系统CPU处于严重过载状态
2. 在第二个终端中使用uptime查看
平均负载高达load average:11.43
3. 在第三个终端运行pidstat看一下进程的情况
可以看出,12个进程在抢夺4个CPU,每个进程等待CPU时间(也就是%wait)高达67%,明显超出CPU的计算范围,最终导致CPU过载
总结一下:
CPU使用率,是单位时间内CPU繁忙情况的统计,跟平均负载并不一定完全对应
(1) CPU密集型进程:使用大量CPU会导致平均负载升高,此时这两者是一致的
(2) I/O密集型进程:等待I/O也会导致平均负载升高,但CPU使用率(user%)不一定很高
(3) 大量等待CPU的进程调度也会导致平均负载升高