uptime命令
[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的进程,也就是我们常用ps命令看到的,处于R状态(Running或Runnable)的进程。
- 不可中断的进程:则是处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的等待硬件设备的I/O响应,也就是我们在ps命令中看到的D状态(Uninterruptible Sleep 也称为Disk Sleep)的进程。
既然平均的是平均活跃进程数,那么最理想的,就是每个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% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,你再去做分析和调查。
扩展:
- 查看哪个线程占用最多cpu:
[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
- 查看负载的变化情况(watch命令默认每2s帮你执行一下uptime命令)
[wanchao@localhost softwares]$ watch -d uptime
- pidstat和mpstat辅助工具(sysstat官网源码下载地址:SYSSTAT (pagesperso-orange.fr)
)
mpstat是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标
[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
网友评论