https://www.jianshu.com/p/beb0b9f590d4
[test@localhost bin]$ uptime
22:02:14 up 3:34, 2 users, load average: 0.00, 0.01, 0.05
#22:02:14 //当前时间
#up 3:34 //系统运行时间
#2 users //正在登陆用户数
#load average //分别是:近1分钟、5分钟、15分钟的系统平均负载
既然平均的是平均活跃进程数,那么最理想的,就是每个cpu上都刚好运行着一个进程,这样每个cpu都得到充分利用。
我们知道,平均负载最理想的情况是等于cpu个数,所以在评判平均负载时,首先你要知道系统有几个cpu,这可以通过top命令,或者从文件 /proc/cpuinfo中读取:
[wanchao@localhost ~]$ grep 'model name' /proc/cpuinfo |wc -l
1
[wanchao@localhost ~]$ cat /proc/cpuinfo |grep 'processor' |wc -l
1
[wanchao@localhost ~]$ cat /proc/cpuinfo |grep 'cpu cores' |uniq
cpu cores : 1
有了cpu个数,我们就可以判断出,当平均负载比cpu个数还大的时候,系统就已经出现了过载。如果1分钟、5分钟、15分钟三个值基本相同,或者相差不大,那就说明系统负载很平稳。
如果一分钟的值远小于15分钟的值,就说明系统最近1分钟的负责在减少,而过去15分钟内却有很大的负载;
反过来如果一分钟的值远大于15分钟的值,就说明最近1分钟的负载在增加,增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。
再举个例子,假设我们在一个单 CPU 系统上看到平均负载为 1.73,0.60,7.98,那么说明在过去 1 分钟内,系统有 73% 的超载,而在 15 分钟内,有 698% 的超载,从整体趋势来看,系统的负载在降低。
那么,在实际生产环境中,平均负载多高时,需要我们重点关注呢?
在我看来,当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
但 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,你再去做分析和调查。
[wanchao@localhost softwares]$ top -H -p 22452 //-H显示线程,-p按cpu占用排序
top - 19:23:24 up 7:47, 4 users, load average: 1.05, 0.85, 0.45
Threads: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
%Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1868660 total, 1191732 free, 189008 used, 487920 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1479500 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22452 root 20 0 41856 3276 1348 R 99.7 0.2 7:53.84 stress-ng-cpu
[wanchao@localhost softwares]$ watch -d uptime
[root@localhost ~]# mpstat -P ALL 5 1
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 02/07/23 _x86_64_ (1 CPU)
00:02:58 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
00:03:03 all 0.00 0.00 99.19 0.00 0.00 0.81 0.00 0.00 0.00 0.00
00:03:03 0 0.00 0.00 99.19 0.00 0.00 0.81 0.00 0.00 0.00 0.00
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 0.00 0.00 99.19 0.00 0.00 0.81 0.00 0.00 0.00 0.00
Average: 0 0.00 0.00 99.19 0.00 0.00 0.81 0.00 0.00 0.00 0.00
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标
[root@localhost ~]# pidstat -u 5 1
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 02/07/23 _x86_64_ (1 CPU)
00:04:04 UID PID %usr %system %guest %wait %CPU CPU Command
00:04:09 0 587 0.00 0.40 0.00 0.00 0.40 0 kworker/u256:31
00:04:09 0 1503 0.20 0.00 0.00 0.00 0.20 0 tuned
00:04:09 0 4744 0.20 98.62 0.00 0.00 98.81 0 stress-ng-io
00:04:09 0 4754 0.20 0.00 0.00 0.00 0.20 0 pidstat
Average: UID PID %usr %system %guest %wait %CPU CPU Command
Average: 0 587 0.00 0.40 0.00 0.00 0.40 - kworker/u256:31
Average: 0 1503 0.20 0.00 0.00 0.00 0.20 - tuned
Average: 0 4744 0.20 98.62 0.00 0.00 98.81 - stress-ng-io
Average: 0 4754 0.20 0.00 0.00 0.00 0.20 - pidstat