在本文中,我們將解釋 Linux 系統(tǒng)中最關(guān)鍵的管理任務(wù)之一——關(guān)于系統(tǒng) / CPU 的負(fù)載(load)和平均負(fù)載(Load average)的性能監(jiān)控。
首先來看所有的類 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 分鐘計算出的平均的系統(tǒng)負(fù)載。
Linux 中,平均負(fù)載一般指在內(nèi)核運(yùn)行隊列中被標(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)計運(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 可以實時顯示 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ī)中,可以使用圖形用戶接口工具查看系統(tǒng)平均負(fù)載。
理解系統(tǒng)平均負(fù)載和 CPU 核心數(shù)的關(guān)系
考慮了 CPU 核心數(shù)的影響,才能解釋系統(tǒng)負(fù)載。
多處理器 Vs 多核處理器
多處理器 – 一個計算機(jī)系統(tǒng)中集成兩個或多個物理 CPU
多核處理器 – 單個物理 CPU 有兩個或多個單獨(dú)的核并行工作(也叫處理單元)。雙核意味著有兩個處理單元,4 核有 4 個處理單元,以此類推。
此外,Intel 引入了超線程技術(shù)用來提高并行計算能力。
通過超線程技術(shù),在操作系統(tǒng)中,單個物理 CPU 表現(xiàn)的和兩個邏輯 CPU 一樣。(實際在硬件上只有一個 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 時間。
?
評論
查看更多