目录
一、概念:
二、平均负载合理值:
三、系统负载趋势判断:
四、何时需要进行负载分析
五、平均负载和CPU使用率区分
六、如何检测负载升高的根源
一、概念
平均负载:在单位时间内,系统的平均活跃进程(可运行进程和不可中断态进)数。
可运行态进程:正在运行CPU的进程和正在等待CPU的进程,即ps -aux 看到R。
不可中断进程:内核态中关键流程中的进程,比如等待IO响应,即ps -aux 看到D。不可断进程是对进程和硬件的保护,比如正在执行读写文件操作,在得到系统回复之前,如果进程被打断,就可能导致文件读写不一致。
二、平均负载合理值
平均负载值含义:其值表示相对于CPU个数的负载压力大小,比如值为2时,其意味:
对于有2个CPU的系统,意味着CPU刚好利用完。
对于有4个CPU的系统,意味着CPU利用率才50%
对于有1个CPU的系统,意味着有一半的进程在竞争CPU。
因此,当系统平均负载小于CPU个数时,系统负载正在可接受范围,
统计CPU个数命令:grep 'model name' /proc/cpuinfo | wc -l。
三、系统负载趋势判断
先通过uptime命令查看:
lsm@ubuntu:~$ uptime
15:39:26 up 20 days, 49 min, 8 users, load average: 1.49, 1.40, 1.44
各个值的含义:
15:39:26 : 系统当前时间
up 20 days, 49 min : 系统运行时间
8 users : 当前用户个数
load average: 1.49, 1.40, 1.44 : 分别表示1分钟,5分钟,15分钟的平均负载值
主要利用load average的1分钟、5分钟、15分钟负载指标进行趋势分析:
如果1分钟、5分钟、15分钟的平均负载值不变,说明系统运行很平稳。
如果1分钟的平均负载小于15分钟的平均负载,说明系统负载正在减少。
如果1分钟的平均负载大于15分钟的平均负载,说明系统负载正在增加,这种增加可能是临时的,需要观察一段时间。
四、何时需要进行负载分析
如果1分钟的平均负载值大于CPU个数,一般大于70%时,说明系统正在过载,需要进行分析。
发现进程响应变慢,影响到服务的正常功能。
通过实时监控负载变化,发现负载突然飙升。
五、平均负载和CPU使用率区分
平均负载的概念在前面提到,其包括正在运行CPU进程、正在等待CPU、正在等待IO进程。CPU使用率是单位时间内CPU的繁忙程度。二者关系:
对于CPU密集型进程,大量使用CPU,会导致平均负载升高,二者一致。
对于IO密集型进程,等待IO会导致负载升高,但是由于CPU并没有被使用,因此CPU使用率并不高。
对于大量等待CPU的进程调度也会引起负载升高和CPU使用率升高。
六、如何检测负载升高的根源
1、 mpstat命令:
作用:检测CPU的负载(主要关注三个指标,用户态利用率%usr,内核态利用率%sys,IO利用率%iowait)。
常用用法:mpstat -P ALL 2。
参数说明:-P 表示指定监控那个CPU,如果用ALL表示监控所有CPU;2,表示每隔2秒刷新。
如何查看:执行mpstat -P ALL 2,会每隔2秒刷新如下打印
lsm@ubuntu:~$ mpstat -P ALL 2
Linux 4.4.0-31-generic (ubuntu) 01/01/2019 _x86_64_ (4 CPU)
04:32:58 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:33:00 PM all 48.73 0.00 10.43 0.00 0.00 1.15 0.00 0.00 0.00 39.69
04:33:00 PM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:33:00 PM 1 10.50 0.00 3.00 0.00 0.00 4.50 0.00 0.00 0.00 82.00
04:33:00 PM 2 45.18 0.00 20.81 0.00 0.00 0.00 0.00 0.00 0.00 34.01
04:33:00 PM 3 38.62 0.00 17.99 0.00 0.00 0.00 0.00 0.00 0.00 43.39
观察%usr,%sys,%iowait指标,上图中CPU 0的%usr飙升到100%,而%iowait为0,那说明可能就是存在CPU密集型程序。
2、pidstast命令:
作用:检测进程产生的负载(主要关注,用户态利用率%usr,内核态利用率%sys,进程名Command,PID)
主要用法:pidstat 2
参数说明:2,表示每隔2秒进行刷新打印
如何查看:执行pidstat 2,会每隔2秒刷新如下打印
lsm@ubuntu:~$ pidstat -u 2
Linux 4.4.0-31-generic (ubuntu) 01/01/2019 _x86_64_ (4 CPU)
04:33:58 PM UID PID %usr %system %guest %CPU CPU Command
04:34:00 PM 0 7 0.00 1.94 0.00 1.94 2 rcu_sched
04:34:00 PM 0 1427 0.49 0.97 0.00 1.46 3 vmtoolsd
04:34:00 PM 0 16957 3.40 20.87 0.00 24.27 2 Xorg
04:34:00 PM 0 17325 0.49 0.00 0.00 0.49 3 unity-panel-ser
04:34:00 PM 0 17493 21.36 5.34 0.00 26.70 1 compiz
04:34:00 PM 0 17533 1.46 0.00 0.00 1.46 1 vmtoolsd
04:34:00 PM 0 26657 64.56 11.17 0.00 75.73 3 snmp_pro
04:34:00 PM 1000 36459 98.54 0.00 0.00 98.54 0 stress
04:34:00 PM 1000 36585 0.49 0.49 0.00 0.97 1 pidstat
可以看到,stress进程导致了用户态CPU利用率%usr达到100%
3、watch:
作用:循环执行命令
常用用法:watch -d uptime,用于一直执行uptime命令,实时查看负载变化。
参数说明:-d,高亮差异化地方。