Linux中國

理解 Linux 的平均負載和性能監控

在本文中,我們將解釋 Linux 系統中最關鍵的管理任務之一——關於系統 / CPU 的 負載 load 平均負載 Load average 性能監控。

首先來看所有的類 UNIX 系統中兩個重要的表述:

  • 系統負載 / CPU 負載 – 衡量 Linux 系統的 CPU 過載或利用率低的指標,即處於運算狀態或等待狀態的 CPU 核心數。
  • 平均負載 – 通過固定的時間周期如 1、5、15 分鐘計算出的平均的系統負載。

Linux 中,平均負載一般指在內核運行隊列中被標記為運行或不可打斷狀態的進程的平均數。

注意:

  • 幾乎沒有 Linux 或類 Unix 系統不為用戶展示平均負載的值。
  • 完全空閑的 Linux 系統平均負載為 0,不包括空閑進程。
  • 絕大多數類 Unix 系統只統計運行和等待狀態的進程。但是在 Linux 中,平均負載也包括處於不可打斷的睡眠狀態的進程——它們是在等待其它系統資源如磁碟 I/O 等的進程。

如何監測 Linux 系統平均負載

有諸多方式監測系統平均負載,如 uptime,它會展示系統運行時間、用戶數量及平均負載:

$ 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 核數的關係。此外,常用的工具 topglances 可以實時顯示 Linux 系統的運行狀態:

Top命令

$ top

顯示運行中的Linux進程:

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系統監測工具:

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 核心數的影響,才能解釋系統負載。

多處理器 Vs 多核處理器

  • 多處理器 – 一個計算機系統中集成兩個或多個物理 CPU
  • 多核處理器 – 單個物理 CPU 有兩個或多個單獨的核並行工作(也叫處理單元)。雙核意味著有兩個處理單元,4 核有 4 個處理單元,以此類推。

此外,Intel 引入了超線程技術用來提高並行計算能力。

通過超線程技術,在操作系統中,單個物理 CPU 表現的和兩個邏輯 CPU 一樣。(實際在硬體上只有一個 CPU)。

注意,單個 CPU 核同一時間只能執行一個任務,於是產生了多 CPU/處理器、多核 CPU,以及多線程技術。

多 CPU 時,多個程序可以同時執行。如今的 Intel CPU 使用了多核心和超線程技術。

可以使用 nproc 或 lscpu 命令查看系統中的處理器單元數量。

$ nproc
4
# 或者
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 有 60% 處於空閑狀態;在最近的 5 分鐘沒有進程等待 CPU 時間。
  • CPU 平均過載了 235%;最近的 15 分鐘平均有 2.35 個進程在等待 CPU 時間。

在雙核系統中意味著:

  • 有一個 CPU 處於完全空閑狀態,另一個 CPU 被使用;最近的 1 分鐘沒有進程等待 CPU 時間。
  • CPU 平均 160% 處於空閑狀態;最近的 5 分鐘沒有進程等待 CPU 時間。
  • CPU 平均過載了 135%;最近的 15 分鐘有 1.35 個進程等待 CPU 時間。

也許你還會喜歡:

  1. 20 個監控系統性能的命令行工具(一)
  2. 13 個 Linux 性能監控工具(二)
  3. Perf:一個 Linux 上的性能監控分析工具
  4. 使用 Nmon 監控 Linux 的系統性能

總而言之,如果你是系統管理員,你應該關注高的平均負載。平均負載高於 CPU 核心數意味著需要增加 CPU,反之則意味著 CPU 未被充分利用。

作者簡介:

Aaron Kili 是 Linux 和自由軟體的熱心者,熱衷於分享知識,現在是 TecMint 網站的內容創作者,不久之後將成為 Linux 系統管理員,web 開發者。

via: https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/

作者:Aaron Kili 譯者:kylecao 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國