(1)查看系统平均负载
$ top
top - 21:52:21 up 386 days, 4:10, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 164 total, 1 running, 163 sleeping, 0 stopped, 0 zombie
或
$ uptime
21:53:01 up 386 days, 4:11, 1 user, load average: 0.00, 0.00, 0.00 # 依次表示1min, 5min,15min平均负载
(2)判断平均负载合理性
系统负载和CPU总数(逻辑总数)的关系,过载情况:load average > CPU 总数
(3)查看系统的CPU总数
$ grep 'model name' /proc/cpuinfo
model name : QEMU Virtual CPU version (cpu64-rhel6)
model name : QEMU Virtual CPU version (cpu64-rhel6)
model name : QEMU Virtual CPU version (cpu64-rhel6)
model name : QEMU Virtual CPU version (cpu64-rhel6)
$ grep 'model name' /proc/cpuinfo|wc -l
4
(4)结合(1)中1min, 5min, 15min负载情况判断负载是在增加还是减少
1min负载>5min负载>15min负载 负载在增加
1min负载<5min负载<15min负载 负载在减少
(5) 当负载高于CPU总数80%时就要排查原因了,是否需要扩容。
------------------------------------------------------------------------
1、平均负载与cpu的关系:
当我们看到1min负载>5min负载>15分钟负载时,意味着负载确实在增加。CPU使用率可能在相同区间内增加。但有时未必增加,这是为什么呢?
首先了解平均负载的定义:单位时间内处于运行状态和不可中断状态的进程数(中断有CPU中断和IO中断)。
CPU使用率:单位时间内CPU处理进程情况统计
所以,平均负载还包括了等待CPU和等待I/O的进程。
通常我们的资源分为计算密集型(CPU密集型),存储密集型(IO密集型)和网络密集型。
计算密集型:CPU升高会引起平均负载升高,此时,平均负载和CPU呈正比关系;
IO密集型:IO等待会引起负载升高,但CPU并不一定会升高;
2、如何查看是什么引起平均负载升高?
用到的命令mpstat pidstat(sudo yum install sysstat或sudo apt-get install sysstat安装命令)
(1)$ watch -d uptime #查看负载变化
Every 2.0s: uptime Sun Jan 6 23:54:40 2019
23:54:40 up 387 days, 6:13, 1 user, load average: 0.01, 0.01, 0.00
(2)$ mpstat -P ALL 5 1 #查看CPU性能指标,并每隔5s输出1组数据
Linux 2.6.32-696.16.1.el6.x86_64 (XXX-hostname-000) 01/06/2019 _x86_64_ (4 CPU)
11:55:25 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
11:55:30 PM all 2.20 0.00 1.25 0.00 0.00 0.30 0.10 0.00 96.15 #总的cpu情况
11:55:30 PM 0 2.79 0.00 2.00 0.00 0.00 0.60 0.20 0.00 94.41 #逻辑cpu0的情况
11:55:30 PM 1 2.40 0.00 1.20 0.00 0.00 0.20 0.00 0.00 96.20
11:55:30 PM 2 2.00 0.00 1.00 0.00 0.00 0.20 0.00 0.00 96.81
11:55:30 PM 3 1.80 0.00 1.00 0.00 0.00 0.40 0.00 0.00 96.79
(3) $ iostat -xdmt 1 1
Linux 2.6.32-696.18.7.1.el6.ucloud.x86_64 (bd-pre-spotlight-search-builder0) 01/08/2019 _x86_64_ (1 CPU)
01/08/2019 03:49:55 PM
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 1.93 49.46 6.65 2.98 0.09 0.20 62.88 0.11 11.91 0.18 38.09 0.27 0.26
vdb
通过上面两步结果会判断出负载升高了,或者CPU升高了,或者二者都升高了。接下来看下是哪个进程引起的负载或者CPU升高。
(4)$ pidstat -u 5 1 #5s输出1组进程数据
Linux 2.6.32-696.16.1.el6.x86_64 (XXX-hostname-000) 01/06/2019 _x86_64_ (4 CPU)
11:57:57 PM PID %usr %system %guest %CPU CPU Command
11:58:02 PM 1383 0.00 0.20 0.00 0.20 3 xxx
11:58:02 PM 3961 1.00 1.40 0.00 2.40 0 xxx
11:58:02 PM 4048 0.20 0.00 0.00 0.20 2 xxx
11:58:02 PM 8473 0.00 0.20 0.00 0.20 1 java
11:58:02 PM 20394 1.60 0.00 0.00 1.60 2 php
总结下,负载升高可能是CPU升高引起的,也可能是IO等待引起的。CPU升高可能是大流量引起的,也可能某个进程导致的。
注:学习倪朋飞老师性能优化课程总结。
总结下:1、CPU高同时负载高,CPU使用率超过80%,考虑扩容;
2、CPU使用高了,负载并不高,参考https://blog.csdn.net/wangtingting_100/article/details/80666709
3、CPU不高,负载高,看是否存在大量的磁盘IO操作,批量查询或者写入。