在本文中,我們將解釋一個關鍵的Linux系統管理任務 – 性能監控,包括系統/CPU負載和負載平均值。
在我們繼續之前,讓我們了解所有類Unix系統中的這兩個重要術語:
- 系統負載/CPU負載 – 是Linux系統中CPU過度或未充分利用的衡量標準;正在由CPU執行或處於等待狀態的進程數量。
- 負載平均值 – 是在給定的1、5和15分鐘時間段內計算的平均系統負載。
在Linux中,負載平均值在技術上被認為是運行平均值,其中包括處於運行或不可中斷狀態的進程在其(核心)執行隊列中的數量。
請注意:
- 所有,如果不是大多數由Linux或其他類Unix系統驅動的系統可能會在某個地方為用戶顯示負載平均值。
- A downright idle Linux system may have a load average of zero, excluding the idle process.
- 幾乎所有類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 核心數量進行關聯。此外,我們還可以使用其他眾所周知的工具,如top和glances,它們顯示運行中 Linux 系統的實時狀態,還有許多其他工具:
Top 命令
$ 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 工具
$ 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,擁有至少兩個或兩個以上獨立的核心(或我們也可以稱之為處理單元),這些核心可以並行工作。這意味著雙核有兩個處理單元,四核有四個處理單元,依此類推。
此外,還有一種處理器技術是由英特爾首次推出,用於改進並行計算,稱為超執行緒技術。
在超執行緒技術下,一個物理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)。
在雙核系統上,這意味著:
- 一個CPU平均100%閒置,一個CPU正在使用;在過去的1分鐘內,沒有進程在等待CPU時間(1.00)。
- CPU平均閒置160%;在過去的5分鐘內,沒有進程在等待CPU時間(0.40)。
- CPU平均超載135%;在過去的15分鐘內,有1.35個進程在等待CPU時間(3.35)。
你可能也喜歡:
總之,如果你是系統管理員,高負載平均值確實值得憂慮。當負載高時,超過 CPU 核心數,這表示對 CPU 的需求很高;而低於 CPU 核心數的低負載平均值則表明 CPU 利用率不足。
Source:
https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/