新聞中心
在本文中,我們將解釋 linux 系統(tǒng)中最關(guān)鍵的管理任務(wù)之一——關(guān)于系統(tǒng) / CPU 的負(fù)載(load)和平均負(fù)載(Load average)的性能監(jiān)控。

成都創(chuàng)新互聯(lián)是一家成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),提供網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需求定制設(shè)計(jì),網(wǎng)站開發(fā)公司,從2013年創(chuàng)立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開發(fā),后臺程序制作以及后期項(xiàng)目運(yùn)營并提出專業(yè)建議和思路。
首先來看所有的類 UNIX 系統(tǒng)中兩個重要的表述:
- 系統(tǒng)負(fù)載 / CPU 負(fù)載 – 衡量 Linux 系統(tǒng)的 CPU 過載或利用率低的指標(biāo),即處于運(yùn)算狀態(tài)或等待狀態(tài)的 CPU 核心數(shù)。
- 平均負(fù)載 – 通過固定的時間周期如 1、5、15 分鐘計(jì)算出的平均的系統(tǒng)負(fù)載。
Linux 中,平均負(fù)載一般指在內(nèi)核運(yùn)行隊(duì)列中被標(biāo)記為運(yùn)行或不可打斷狀態(tài)的進(jìn)程的平均數(shù)。
注意:
- 幾乎沒有 Linux 或類 Unix 系統(tǒng)不為用戶展示平均負(fù)載的值。
- 完全空閑的 Linux 系統(tǒng)平均負(fù)載為 0,不包括空閑進(jìn)程。
- 絕大多數(shù)類 Unix 系統(tǒng)只統(tǒng)計(jì)運(yùn)行和等待狀態(tài)的進(jìn)程。但是在 Linux 中,平均負(fù)載也包括處于不可打斷的睡眠狀態(tài)的進(jìn)程——它們是在等待其它系統(tǒng)資源如磁盤 I/O 等的進(jìn)程。
如何監(jiān)測 Linux 系統(tǒng)平均負(fù)載
有諸多方式監(jiān)測系統(tǒng)平均負(fù)載,如 uptime,它會展示系統(tǒng)運(yùn)行時間、用戶數(shù)量及平均負(fù)載:
$ uptime
07:13:53 up 8 days, 19 min, 1 user, load average: 1.98, 2.15, 2.21
平均負(fù)載的數(shù)字從左到右的含義依次為:
- 最近 1 分鐘的平均負(fù)載為 1.98
- 最近 5 分鐘的平均負(fù)載為 2.15
- 最近 15 分鐘的平均負(fù)載為 2.21
高平均負(fù)載意味著系統(tǒng)是過載的:許多進(jìn)程在等待 CPU 時間。
下一節(jié)將介紹平均負(fù)載和 CPU 核數(shù)的關(guān)系。此外,常用的工具 top 和 glances 可以實(shí)時顯示 Linux 系統(tǒng)的運(yùn)行狀態(tài):
Top命令
$ top
顯示運(yùn)行中的Linux進(jìn)程:
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 工具
$ glances
Glances – Linux系統(tǒng)監(jiān)測工具:
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
...
這些工具中的平均負(fù)載是從 /proc/loadavg 文件中讀取的,也可以直接使用 cat 命令查看:
$ cat /proc/loadavg
2.48 1.69 1.42 5/889 10570
想要圖形樣式監(jiān)測平均負(fù)載,請戳:ttyload – 終端中顏色編碼圖形顯示 Linux 平均負(fù)載。
在桌面計(jì)算機(jī)中,可以使用圖形用戶接口工具查看系統(tǒng)平均負(fù)載。
理解系統(tǒng)平均負(fù)載和 CPU 核心數(shù)的關(guān)系
考慮了 CPU 核心數(shù)的影響,才能解釋系統(tǒng)負(fù)載。
多處理器 Vs 多核處理器
- 多處理器 – 一個計(jì)算機(jī)系統(tǒng)中集成兩個或多個物理 CPU
- 多核處理器 – 單個物理 CPU 有兩個或多個單獨(dú)的核并行工作(也叫處理單元)。雙核意味著有兩個處理單元,4 核有 4 個處理單元,以此類推。
此外,Intel 引入了超線程技術(shù)用來提高并行計(jì)算能力。
通過超線程技術(shù),在操作系統(tǒng)中,單個物理 CPU 表現(xiàn)的和兩個邏輯 CPU 一樣。(實(shí)際在硬件上只有一個 CPU)。
注意,單個 CPU 核同一時間只能執(zhí)行一個任務(wù),于是產(chǎn)生了多 CPU/處理器、多核 CPU,以及多線程技術(shù)。
多 CPU 時,多個程序可以同時執(zhí)行。如今的 Intel CPU 使用了多核心和超線程技術(shù)。
可以使用 nproc 或 lscpu 命令查看系統(tǒng)中的處理器單元數(shù)量。
$ nproc
4
# 或者
lscpu
也可以使用 grep 命令:
$ grep 'model name' /proc/cpuinfo | wc -l
4
為了進(jìn)一步理解系統(tǒng)負(fù)載,需要做一些假設(shè)。假設(shè)系統(tǒng)負(fù)載如下:
23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35
在單核系統(tǒng)中意味著:
- CPU 被充分利用(100%);最近的 1 分鐘有 1 個進(jìn)程在運(yùn)行。
- CPU 有 60% 處于空閑狀態(tài);在最近的 5 分鐘沒有進(jìn)程等待 CPU 時間。
- CPU 平均過載了 235%;最近的 15 分鐘平均有 2.35 個進(jìn)程在等待 CPU 時間。
在雙核系統(tǒng)中意味著:
- 有一個 CPU 處于完全空閑狀態(tài),另一個 CPU 被使用;最近的 1 分鐘沒有進(jìn)程等待 CPU 時間。
- CPU 平均 160% 處于空閑狀態(tài);最近的 5 分鐘沒有進(jìn)程等待 CPU 時間。
- CPU 平均過載了 135%;最近的 15 分鐘有 1.35 個進(jìn)程等待 CPU 時間。
也許你還會喜歡:
- 20 個監(jiān)控系統(tǒng)性能的命令行工具(一)
- 13 個 Linux 性能監(jiān)控工具(二)
- Perf:一個 Linux 上的性能監(jiān)控分析工具
- 使用 Nmon 監(jiān)控 Linux 的系統(tǒng)性能
總而言之,如果你是系統(tǒng)管理員,你應(yīng)該關(guān)注高的平均負(fù)載。平均負(fù)載高于 CPU 核心數(shù)意味著需要增加 CPU,反之則意味著 CPU 未被充分利用。
分享標(biāo)題:理解Linux的平均負(fù)載和性能監(jiān)控
分享URL:http://fisionsoft.com.cn/article/djdgphg.html


咨詢
建站咨詢
