引言:平时系统运行缓慢,就会使用top、uptime、cat /proc/loadavg、w等。查看系统负载。但是只是大概看下,感觉并不是很清楚每一项的含义,故再次做出整理。
[root@foundation58 kiosk]# uptime
22:32:54 up 1 min, 2 users, load average: 0.59, 0.23, 0.08
含义:
当前时间,系统已经运新的时间、当前系统用户数、过去:1min 5min 15min 的平均负载值
但是这个负载值又是啥意思嘞?表示CPU占有率?
待我慢慢道来。
1、关于系统负载和系统平均负载?
系统负载:它反映了系统繁忙程度,指的是当前正在被CPU执行和等待被CPU执行的进程数目总和
多核CPU情况下,完美情况是所有CPU都在使用,没有进程在等待处理,所以,load的理想值是CPU的数目。
平均负载:通过固定时间周期比如:1、5、15min计算出的平均的系统负载。
需要注意的是:
在Linux中平均负载指的是:内核运行队列中被标记为运行或不可打断的睡眠状态(磁盘I/O进程ps可以看到的D状态)的进程的平均数。
平均负载包含了正在使用CPU的进程,还包括等待I/O的进程。
- CPU密集型进程,使用大量CPU会导致平均负载升高,此时两者是一致的。
- I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高。
- 大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。
①那么可运行状态的进程又是啥嘞?“套娃套娃”
指正在使用CPU或者等待CPU的进程。平时我们PS就可以看到。
[root@foundation58 kiosk]# ps
PID TTY TIME CMD
2399 pts/0 00:00:00 su
2402 pts/0 00:00:00 bash
2774 pts/0 00:00:00 ps
②不可中断状态的进程?
处于内核态关键流程中的进程,并且这些流程不可打断。
Eg:等待硬件的I/O响应,比如说ps可以看到的D(disk sleep)状态的进程。
Eg:当一个进程向磁盘读写数据是,为了保存数据的一致性,在得到磁盘的回复前,不能被其他进程或者中断打断,此时进程处于不可中断状态。
若被打断,就容易出现磁盘数据与进程数据不一致问题。
所以不可中断状态实质还是一种系统对进程和硬件设备的保护机制。
③平均活跃进程数?
直观的理解就是:单位时间内的活跃进程数。load=2时,在2cpu的系统上,意味着CPU刚好被占用。
平均最理想情况下负载的值就是CPU的数目。
2、负载值为多少比较合理?
①1min 5min 15min 三个值差别不大,说明系统负载很平稳
②如果1min远小于15min的值,说明最近1min内负载就在减小,过去15min负载比较大
③如果1min远大于15min的值,说明最近1min的负载在逐渐增加,这时候就要进行持续观察。一旦1min的平均负载接近或者超过了cpu的个数,就意味着系统正在发生过载的问题。
3、如何检测系统负载?
可以直接cat /proc/loadavg
或者通过命令查看Uptime、w、top
(1)、cat /proc/loadavg
[root@foundation58 kiosk]# cat /proc/loadavg
0.43 0.51 0.28 2/532 2821
内容说明:
0.43 0.51 0.28 //表示最近1分钟,5分钟,15分钟 系统的平均负载; 系统负载越高,代表CPU越繁忙;
2/532 //2代表此时运行队列中的进程个数; 532代表系统中进程的总数
2821 //代表到此为止创建的最后一个进程的ID.
(2)、uptime
[root@foundation58 kiosk]# uptime
22:32:54 up 1 min, 2 users, load average: 0.59, 0.23, 0.08
内容说明:
系统现在的时间
已经运行的时间
用户连接数
平均负载:过去1min 5min 15min 的系统平均负载
(3)、w(了解就可以哈)
[root@foundation58 kiosk]# w
22:44:33 up 12 min, 2 users, load average: 0.56, 0.54, 0.36
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
kiosk :0 :0 22:32 ?xdm? 3:40 0.07s gdm-session-wor
kiosk pts/0 :0 22:32 1.00s 0.09s 1.35s /usr/libexec/gn
说明:
用户名 终端号 远程主机名 登陆时间 空闲时间
JCPU:和该终端(tty)连接的所有进程占用的时间,这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
PCPU:指当前进程(即在WHAT项中显示的进程)所占用的时间
WHAT:当前正在运行进程的命令行
(4)、top
[root@foundation58 kiosk]# top
top - 22:50:00 up 18 min, 2 users, load average: 0.30, 0.43, 0.36
Tasks: 215 total, 1 running, 213 sleeping, 0 stopped, 1 zombie
%Cpu(s): 3.2 us, 1.4 sy, 0.0 ni, 95.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7868644 total, 5142088 free, 1422516 used, 1304040 buff/cache
KiB Swap: 7995388 total, 7995388 free, 0 used. 5953640 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2543 kiosk 20 0 3370248 508584 129140 S 8.7 6.5 2:18.70 Web Content
2490 kiosk 20 0 3201832 349548 138960 S 3.0 4.4 1:17.64 firefox-bin
1897 kiosk 20 0 1612020 130740 40884 S 2.3 1.7 0:32.21 gnome-shell
1636 root 20 0 302816 48916 38948 S 1.0 0.6 0:20.54 Xorg
1950 kiosk 9 -11 694016 11552 7944 S 2.3 0.1 0:20.04 pulseaudio
1982 kiosk 20 0 470992 6768 3524 S 0.0 0.1 0:04.16 ibus-daemon
2106 kiosk 20 0 1357724 39948 20264 S 0.0 0.5 0:02.96 nautilus
2338 kiosk 20 0 346828 14252 8116 S 0.0 0.2 0:02.48 ibus-engin+
1 root 20 0 125380 3976 2432 S 0.0 0.1 0:02.45 systemd
2346 kiosk 20 0 723004 21272 13476 S 0.7 0.3 0:02.07 gnome-term+
2193 kiosk 20 0 536868 13088 6180 S 0.0 0.2 0:01.70 tracker-st+
2029 kiosk 20 0 569280 8052 5072 S 0.3 0.1 0:01.58 caribou
760 dbus 20 0 28280 3344 1396 S 0.0 0.0 0:01.54 dbus-daemon
2124 kiosk 39 19 1185008 229112 10104 S 0.0 2.9 0:01.43 tracker-ex+
788 root 20 0 512632 10144 6424 S 0.0 0.1 0:01.40 NetworkMan+
1843 kiosk 20 0 26752 2020 1324 S 0.7 0.0 0:01.38 dbus-daemon
2614 kiosk 20 0 2697560 71788 37328 S 0.0 0.9 0:01.32 WebExtensi+
分为两大部分:
第一部分:
top那一行:同uptime w
tasks行:任务的总数、运行中(running)的任务、休眠(sleeping)中的任务、停止(stopped)的任务、僵尸状态(zombie)的任务
CPU行:表示CPU整体信息。
字段 | 字段释义 |
us | user: 运行(未调整优先级的) 用户进程的CPU时间 |
sy | system: 运行内核进程的CPU时间 |
ni | niced:运行已调整优先级的用户进程的CPU时间 |
id | idle:空闲时间 |
wa | IO wait: 用于等待IO完成的CPU时间 |
hi | 处理硬件中断的CPU时间 |
si | 处理软件中断的CPU时间 |
st | 这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的) |
内存行:全部可用内存、已使用内存、空闲内存、缓冲内存
swap行:全部、已使用、空闲和缓冲交换空间
第二部分:各进程任务的状态监控
经常用到的参数:
PID: 进程ID
S :进程状态:
- D - 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。%CPU显示的是进程占用一个核的百分比,而不是整个cpu(N核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100
%MEM:进程时用的可用物理内存占的百分比
COMMAND:进程名