首頁 > 軟體

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

2020-06-16 17:12:01

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

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

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

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

注意:

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

 

如何監測 Linux 系統平均負載

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

  1. $ uptime
  2. 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 核數的關係。此外,常用的工具 top 和 glances 可以實時顯示 Linux 系統的執行狀態:

 

Top命令

  1. $ top

顯示執行中的Linux進程:

  1. top-12:51:42 up 2:11,1 user, load average:1.22,1.12,1.26
  2. Tasks:243 total,1 running,242 sleeping,0 stopped,0 zombie
  3. %Cpu(s):17.4 us,2.9 sy,0.3 ni,74.8id,4.6 wa,0.0 hi,0.0 si,0.0 st
  4. KiBMem:8069036 total,388060 free,4381184 used,3299792 buff/cache
  5. KiBSwap:3906556 total,3901876 free,4680 used.2807464 avail Mem
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 6265 tecmint 200124434817068083616 S 13.32.16:47.72Headset
  8. 2301 tecmint 9-11640332133449932 S 6.70.22:18.96 pulseaudio
  9. 2459 tecmint 200170769231562862992 S 6.73.96:55.45 cinnamon
  10. 2957 tecmint 20026446441.035g137968 S 6.713.550:11.13 firefox
  11. 3208 tecmint 2005070605213633152 S 6.70.60:04.34 gnome-terminal-
  12. 3272 tecmint 2001521380391324178348 S 6.74.86:21.01 chrome
  13. 6220 tecmint 200159539210696476836 S 6.71.33:31.94Headset
  14. 1 root 20012005662043964 S 0.00.10:01.83systemd
  15. 2 root 200000 S 0.00.00:00.00 kthreadd
  16. 3 root 200000 S 0.00.00:00.10 ksoftirqd/0
  17. 5 root 0-20000 S 0.00.00:00.00 kworker/0:0H
  18. ....

 

Glances 工具

  1. $ glances

Glances – Linux系統監測工具:

  1. TecMint(LinuxMint1864bit/Linux4.4.0-21-generic)Uptime:2:16:06
  2. CPU 16.4%nice:0.1% LOAD 4-core MEM 60.5% active:4.90G SWAP 0.1%
  3. user:10.2% irq:0.0%1 min:1.20 total:7.70G inactive:2.07G total:3.73G
  4. system:3.4% iowait:2.7%5 min:1.16 used:4.66G buffers:242M used:4.57M
  5. idle:83.6% steal:0.0%15 min:1.24 free:3.04G cached:2.58G free:3.72G
  6. NETWORK Rx/s Tx/s TASKS 253(883 thr),1 run,252 slp,0 oth sorted automatically by cpu_percent, flat view
  7. enp1s0 525Kb31Kb
  8. lo 2Kb2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command
  9. wlp2s0 0b0b14.613.32.53G1.03G2957 tecmint 0 S 51:49.10040K/usr/lib/firefox/firefox
  10. 7.42.21.16G176M6265 tecmint 0 S 7:08.1800/usr/lib/Headset/Headset--type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF--lan
  11. DISK I/O R/s W/s 4.93.91.63G310M2459 tecmint 0 R 7:12.1800 cinnamon --replace
  12. ram0 004.20.2625M13.0M2301 tecmint -11 S 2:29.7200/usr/bin/pulseaudio --start --log-target=syslog
  13. ram1 004.21.31.52G105M6220 tecmint 0 S 3:42.6400/usr/lib/Headset/Headset
  14. ram10 002.90.8409M66.7M6240 tecmint 0 S 2:40.4400/usr/lib/Headset/Headset--type=gpu-process --no-sandbox --supports-dual-gpus=false--gpu-driver-bug-workarounds=7,2
  15. ram11 002.91.8531M142M1690 root 0 S 6:03.7900/usr/lib/xorg/Xorg:0-audit 0-auth /var/lib/mdm/:0.Xauth-nolisten tcp vt8
  16. ram12 002.60.379.3M23.8M9651 tecmint 0 R 0:00.7100/usr/bin/python3 /usr/bin/glances
  17. ram13 001.64.81.45G382M3272 tecmint 0 S 6:25.3004K/opt/google/chrome/chrome
  18. ...

這些工具中的平均負載是從 /proc/loadavg 檔案中讀取的,也可以直接使用 cat 命令檢視:

  1. $ cat/proc/loadavg
  2. 2.481.691.425/88910570

想要圖形樣式監測平均負載,請戳:ttyload – 終端中顏色編碼圖形顯示 Linux 平均負載

在桌面計算機中,可以使用圖形使用者介面工具檢視系統平均負載。

 

理解系統平均負載和 CPU 核心數的關係

考慮了 CPU 核心數的影響,才能解釋系統負載。

 

多處理器 Vs 多核處理器

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

此外,Intel 引入了超執行緒技術用來提高平行計算能力。

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

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

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

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

  1. $ nproc
  2. 4
  3. #或者
  4. lscpu

也可以使用 grep 命令:

  1. $ grep'model name'/proc/cpuinfo |wc-l
  2. 4

為了進一步理解系統負載,需要做一些假設。假設系統負載如下:

  1. 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 時間。

總而言之,如果你是系統管理員,你應該關注高的平均負載。平均負載高於 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中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-06/145123.htm


IT145.com E-mail:sddin#qq.com