了解 Linux 负载平均值并监控 Linux 性能
在本文中,我们将解释关键的 Linux 系统管理任务之一 - 系统/CPU 负载和平均负载方面的性能监控。
在我们进一步讨论之前,让我们先了解所有类 Unix 系统中的这两个重要短语:
- 系统负载/CPU 负载 – 衡量 Linux 系统中 CPU 利用率过高或不足的指标; CPU 正在执行或处于等待状态的进程数。
- 平均负载 – 是在给定时间段(1、5 和 15 分钟)内计算的平均系统负载。
在 Linux 中,从技术上讲,平均负载被认为是其(内核)执行队列中标记为正在运行或不可中断的进程的运行平均值。
请注意:
- 所有(如果不是大多数)由 Linux 或其他类 Unix 系统驱动的系统都可能会在某处为用户显示负载平均值。
- 完全空闲的 Linux 系统的平均负载可能为零(不包括空闲进程)。
- 几乎所有类 Unix 系统都只计算处于运行或等待状态的进程。但 Linux 的情况并非如此,它包括处于不间断睡眠状态的进程;那些等待其他系统资源(如磁盘 I/O 等)的人。
如何监控 Linux 系统平均负载
有多种方法可以监控系统平均负载,包括显示系统运行时间的正常运行时间、用户数量以及平均负载:
uptime
07:13:53 up 8 days, 19 min, 1 user, load average: 1.98, 2.15, 2.21
数字是从左到右读取的,上面的输出意味着:
- 过去1分钟的平均负载为1.98
- 过去5分钟的平均负载为2.15
- 过去15分钟的平均负载为2.21
高平均负载意味着系统过载;许多进程正在等待 CPU 时间。
我们将在下一节中与 CPU 核心数量相关的部分来揭示这一点。此外,我们还可以使用其他众所周知的工具,例如显示正在运行的Linux系统的实时状态的top和glances,以及许多其他工具:
最高指挥部
top
top - 12:51:42 up 2:11, 1 user, load average: 1.22, 1.12, 1.26
Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.4 us, 2.9 sy, 0.3 ni, 74.8 id, 4.6 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8069036 total, 388060 free, 4381184 used, 3299792 buff/cache
KiB Swap: 3906556 total, 3901876 free, 4680 used. 2807464 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6265 tecmint 20 0 1244348 170680 83616 S 13.3 2.1 6:47.72 Headset
2301 tecmint 9 -11 640332 13344 9932 S 6.7 0.2 2:18.96 pulseaudio
2459 tecmint 20 0 1707692 315628 62992 S 6.7 3.9 6:55.45 cinnamon
2957 tecmint 20 0 2644644 1.035g 137968 S 6.7 13.5 50:11.13 firefox
3208 tecmint 20 0 507060 52136 33152 S 6.7 0.6 0:04.34 gnome-terminal-
3272 tecmint 20 0 1521380 391324 178348 S 6.7 4.8 6:21.01 chrome
6220 tecmint 20 0 1595392 106964 76836 S 6.7 1.3 3:31.94 Headset
1 root 20 0 120056 6204 3964 S 0.0 0.1 0:01.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
....
扫视工具
glances
TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic) Uptime: 2:16:06
CPU 16.4% nice: 0.1% LOAD 4-core MEM 60.5% active: 4.90G SWAP 0.1%
user: 10.2% irq: 0.0% 1 min: 1.20 total: 7.70G inactive: 2.07G total: 3.73G
system: 3.4% iowait: 2.7% 5 min: 1.16 used: 4.66G buffers: 242M used: 4.57M
idle: 83.6% steal: 0.0% 15 min: 1.24 free: 3.04G cached: 2.58G free: 3.72G
NETWORK Rx/s Tx/s TASKS 253 (883 thr), 1 run, 252 slp, 0 oth sorted automatically by cpu_percent, flat view
enp1s0 525Kb 31Kb
lo 2Kb 2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command
wlp2s0 0b 0b 14.6 13.3 2.53G 1.03G 2957 tecmint 0 S 51:49.10 0 40K /usr/lib/firefox/firefox
7.4 2.2 1.16G 176M 6265 tecmint 0 S 7:08.18 0 0 /usr/lib/Headset/Headset --type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF --lan
DISK I/O R/s W/s 4.9 3.9 1.63G 310M 2459 tecmint 0 R 7:12.18 0 0 cinnamon --replace
ram0 0 0 4.2 0.2 625M 13.0M 2301 tecmint -11 S 2:29.72 0 0 /usr/bin/pulseaudio --start --log-target=syslog
ram1 0 0 4.2 1.3 1.52G 105M 6220 tecmint 0 S 3:42.64 0 0 /usr/lib/Headset/Headset
ram10 0 0 2.9 0.8 409M 66.7M 6240 tecmint 0 S 2:40.44 0 0 /usr/lib/Headset/Headset --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=7,2
ram11 0 0 2.9 1.8 531M 142M 1690 root 0 S 6:03.79 0 0 /usr/lib/xorg/Xorg :0 -audit 0 -auth /var/lib/mdm/:0.Xauth -nolisten tcp vt8
ram12 0 0 2.6 0.3 79.3M 23.8M 9651 tecmint 0 R 0:00.71 0 0 /usr/bin/python3 /usr/bin/glances
ram13 0 0 1.6 4.8 1.45G 382M 3272 tecmint 0 S 6:25.30 0 4K /opt/google/chrome/chrome
...
这些工具显示的负载平均值是读取 /proc/loadavg 文件的,您可以使用 cat 命令查看该文件,如下所示:
cat /proc/loadavg
2.48 1.69 1.42 5/889 10570
要以图形格式监控负载平均值,请查看:ttyload – 在终端中显示 Linux 负载平均值的颜色编码图
在台式机上,我们可以使用图形用户界面工具来查看系统负载平均值。
了解系统平均负载与 CPU 数量的关系
如果不阐明 CPU 核心数量对性能的影响,我们就不可能解释系统负载或系统性能。
多处理器与多核
- 多处理器 - 是将两个或多个物理 CPU 集成到单个计算机系统中的地方。
- 多核处理器 – 是一个物理CPU,它至少有两个或更多并行工作的独立核心(或者我们也可以称为处理单元)。这意味着双核有 2 个两个处理单元,四核有 4 个处理单元,依此类推。
此外,还有一种处理器技术,是由Intel首次推出的用于改进并行计算的处理器技术,称为超线程。
在超线程下,单个物理 CPU 核心对于操作系统来说表现为两个逻辑 CPU 核心(但实际上,只有一个物理硬件组件)。
请注意,单个 CPU 核心一次只能执行一项任务,因此多 CPU/处理器、多核 CPU 和超线程等技术应运而生。
使用多个CPU,可以同时执行多个程序。当今的英特尔 CPU 结合使用了多核和超线程技术。
要查找系统上可用的处理单元的数量,我们可以使用 nproc 或 lscpu 命令,如下所示:
nproc
4
OR
lscpu
使用 grep 命令查找处理单元数量的另一种方法如图所示。
grep 'model name' /proc/cpuinfo | wc -l
4
现在,为了进一步了解系统负载,我们将采取一些假设。假设我们的平均负载如下:
23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35
在单核系统上,这意味着:
- CPU 平均得到充分利用(100%);过去 1 分钟内有 1 个进程在 CPU (1.00) 上运行。
- CPU平均空闲率为60%;过去 5 分钟内没有进程等待 CPU 时间 (0.40)。
- CPU平均过载235%;过去 15 分钟内有 2.35 个进程正在等待 CPU 时间 (3.35)。
在双核系统上,这意味着:
- 1个CPU平均100%空闲,1个CPU正在使用;过去 1 分钟内没有进程等待 CPU 时间 (1.00)。
- CPU 平均空闲率为 160%;没有进程在等待 CPU 时间。 (0.40) 在过去 5 分钟内。
- CPU平均过载135%; 1.35 个进程正在等待 CPU 时间。 (3.35) 过去 15 分钟。
你可能还喜欢:
- 监控 Linux 性能的 20 个命令行工具 – 第 1 部分
- 13 个 Linux 性能监控工具 – 第 2 部分
- Perf-Linux 性能监控和分析工具
- Nmon:分析和监控 Linux 系统性能
总之,如果您是系统管理员,那么高平均负载确实值得担心。当负载平均值高于 CPU 核心数时,表明对 CPU 的需求较高,而低于 CPU 核心数的低负载平均值则表明 CPU 未得到充分利用。