在本文中,我們將解釋 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 核數的關系。此外,常用的工具 top 和 glances 可以實時顯示 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 時間。
?
評論
查看更多