获取服务器负载情况
$ uptime
02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88
- 02:34:03 当前时间
- up 2 days, 20:14 系统运行时间
- 1 user 正在登录用户数
- load average 负载指标,分别为:1分钟,5分钟,15分钟
平均负载含义
简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
平均负载就是平均活跃进程数,实际上就是活跃进程数的指标衰减值
- 可运行状态:处于使用CPU或者正在等待CPU的进程,也就是ps中R状态的进程
- 不可中断状态:处于内核态关键流程中的进程,常见的就是等待硬件设备的I/O响应,也就是ps中D状态 负载数 = CPU个数
$ grep 'model name' /proc/cpuinfo | wc -l
2
# 关于grep和wc的用法请查询它们的手册或者网络搜索
CPU情况分类
- CPU密集型进程、使用大量的CPU会导致平均负载的升高,此时这2者是一致的
- I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高
- 大量等待CPU的进程调度也会导致平均负载升高,但此时的CPU使用率也会比较高
案例
使用 如下这些工具
- iostat :压力测试工具,模拟平均负载升高的场景
- mpstat :CPU分析工具,实时查看每个CPU的性能指标和所有CPU的平均指标
- pidstat :进程性能分析工具,实时查看每个进程的CPU、内存、I/O以及上下文切换等性能指标 等工具
CPU密集型进程
先查看平均负载的情况
$ uptime
..., load average: 0.11, 0.15, 0.09
模拟一个CPU使用率100%的场景
$ stress --cpu 1 --timeout 600
实时查看平均负载情况
# -d 参数表示高亮显示变化的区域
$ watch -d uptime
..., load average: 1.00, 0.75, 0.39
查看CPU使用率情况
# -P ALL 表示监控所有CPU,每5秒输出一次数据,一共输出3次
$ mpstat -P ALL 5 3
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:30:06 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:30:11 all 50.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 49.95
13:30:11 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13:30:11 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
查看进程性能情况
# 每5秒输出一次数据,一共输出3次
$ pidstat -u 5 3
13:37:07 UID PID %usr %system %guest %wait %CPU CPU Command
13:37:12 0 2962 100.00 0.00 0.00 0.00 100.00 1 stress
I/O密集型进程
模拟I/O压力,不停的执行sync ,同步
$ stress -i 1 --timeout 600
注:上列命令使用的是sync()系统调用,作用是刷新缓存区内存到磁盘,缓冲区比较小时,无法产生大的IO压力,可以使用下一代命令stress-ng -i 1 --hdd 1 --timeout 600,hdd表示读写临时文件
实时查看平均负载情况
# -d 参数表示高亮显示变化的区域
$ watch -d uptime
..., load average: 1.00, 0.75, 0.39
查看CPU使用率情况
# -P ALL 表示监控所有CPU,每5秒输出一次数据,一共输出3次
$ mpstat -P ALL 5 3
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:41:28 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:41:33 all 0.21 0.00 12.07 32.67 0.00 0.21 0.00 0.00 0.00 54.84
13:41:33 0 0.43 0.00 23.87 67.53 0.00 0.43 0.00 0.00 0.00 7.74
13:41:33 1 0.00 0.00 0.81 0.20 0.00 0.00 0.00 0.00 0.00 98.99
查看进程性能情况
# 每5秒输出一次数据,一共输出3次
$ pidstat -u 5 3
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command
13:42:13 0 104 0.00 3.39 0.00 0.00 3.39 1 kworker/1:1H
13:42:13 0 109 0.00 0.40 0.00 0.00 0.40 0 kworker/0:1H
13:42:13 0 2997 2.00 35.53 0.00 3.99 37.52 1 stress
13:42:13 0 3057 0.00 0.40 0.00 0.00 0.40 0 pidstat
大量进程的场景
系统2个CPU,模拟8个CPU进程
$ stress -c 8 --timeout 600
实时查看平均负载情况
# -d 参数表示高亮显示变化的区域
$ watch -d uptime
..., load average: 7.97, 5.93, 3.02
查看进程性能情况
# 每5秒输出一次数据,一共输出3次
$ pidstat -u 5 3
14:23:25 UID PID %usr %system %guest %wait %CPU CPU Command
14:23:30 0 3190 25.00 0.00 0.00 74.80 25.00 0 stress
14:23:30 0 3191 25.00 0.00 0.00 75.20 25.00 0 stress
14:23:30 0 3192 25.00 0.00 0.00 74.80 25.00 1 stress
14:23:30 0 3193 25.00 0.00 0.00 75.00 25.00 1 stress
14:23:30 0 3194 24.80 0.00 0.00 74.60 24.80 0 stress
14:23:30 0 3195 24.80 0.00 0.00 75.00 24.80 0 stress
14:23:30 0 3196 24.80 0.00 0.00 74.60 24.80 1 stress
14:23:30 0 3197 24.80 0.00 0.00 74.80 24.80 1 stress
14:23:30 0 3200 0.00 0.20 0.00 0.20 0.20 0 pidstat