1-平均负载
- 当发现机器cpu告警或者网络IO告警的时候,一般情况下会用uptime(也可以htop)
16:05:16 up 172 days, 15:29, 1 user, load average: 0.11, 0.27, 0.37
1 user : 当前有多少用户d
0.11, 0.27, 0.37 : 分别是最近1,5,15分钟的平均负载(load average)
What is load average ?
- 粗俗理解:最近有多少任务在单位时间内有多少任务在执行,如果这个数量超过cpu核心数,则表示机器负载过高(因为所谓并行,只不过是cpu切换的快罢了)
- 书上的说法: 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
- 可运行状态: 正在使用或者正在等待cpu的进程
- 不可中断状态: 处于内核态关键流程中的进程,并且这些流程是不可打断的,最常见的是等待硬件设备的I/o响应
理解平均负载和cpu使用率之间的区别
- 平均负载的影响因素有 cpu + 硬盘或者其他等待I/O
- cpu使用率高,平均负载肯定会高,但是cpu使用率低,平均负载不一定低
平均负载到了多少要开始警惕?
- 一般来说达到百分之70就要开始留心了
如果遇到平均负载过高的情况,我们要怎么处理?
- 1.首先我们可以先用 mpstat 查看cpu使用率的变化
# -P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
# 第一种是cpu密集导致
$ mpstat -P ALL 5
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
# 第二种是io密集导致
# 显示所有CPU的指标,并在间隔5秒输出一组数据
$ mpstat -P ALL 5 1
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
- 2, 发现cpu使用过高后,转用pidstat找到是哪个进程占用了cpu
# 间隔5秒后输出一组数据
$ pidstat -u 5 1
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
- 3, 发现是iowait过高后,转用pidstat找到是哪个进程导致
# 间隔5秒后输出一组数据,-u表示CPU指标
$ pidstat -u 5 1
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command 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
-
4, 接下来就是定位大家自己写的程序出现的问题了~~
-
ps: 参考书籍:《极客时间-Linux性能优化实战-倪朋飞》