PostgreSQLDBA(88)-Linux(CPU使用率vs平均負(fù)載)

Linux已成為事實(shí)上企業(yè)級服務(wù)器OS的首選,PostgreSQL在Linux上的”裝機(jī)量”不在少數(shù),在對數(shù)據(jù)庫的性能進(jìn)行優(yōu)化和調(diào)整時,同時也必須考慮到Linux的優(yōu)化和調(diào)整.
本節(jié)簡單介紹了Linux性能監(jiān)控中的兩個容易混淆的概念:CPU使用率和平均負(fù)載.

日常使用中最為常見的性能監(jiān)控工是top,下面來看看top的輸出:

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)遼陽縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

top - 14:20:02 up  2:19,  3 users,  load average: 0.00, 0.01, 0.07
Tasks: 126 total,   1 running, 125 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.7 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3873760 total,   288164 free,    87888 used,  3497708 buff/cache
KiB Swap:  1048572 total,   970292 free,    78280 used.  2952064 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                
    1 root      20   0  193748   3452   2240 S   0.7  0.1   0:05.85 systemd                
  917 dbus      20   0   32780   1028    704 S   0.7  0.0   0:00.30 dbus-daemon            
   17 root      rt   0       0      0      0 S   0.3  0.0   0:09.25 migration/2            
  559 root      20   0       0      0      0 S   0.3  0.0   0:17.53 kworker/2:2            
  912 root      20   0   24204   1020    864 S   0.3  0.0   0:00.36 systemd-logind         
  915 root      20   0  216908    476    440 S   0.3  0.0   0:00.04 abrt-watch-log       
....

輸出的第1行

top - 14:20:02 up  2:19,  3 users,  load average: 0.00, 0.01, 0.07

其中l(wèi)oad average: 0.00, 0.01, 0.07是過去1分鐘/5分鐘/15分鐘的load average(平均負(fù)載).
這個平均負(fù)載是什么意思呢?按大神Brendan Gregg的說法,平均負(fù)載是指系統(tǒng)可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù),它和CPU使用并沒有直接的關(guān)系.可運(yùn)行狀態(tài)進(jìn)程包括正在使用CPU或者正在等待CPU的進(jìn)程,不可中斷狀態(tài)是指正處于內(nèi)核態(tài)不可中斷關(guān)鍵流程中的進(jìn)程,比如硬件設(shè)備的I/O響應(yīng)等,通過top或ps命令看的D狀態(tài)進(jìn)程就是這種狀態(tài).

輸出的第3行

%Cpu(s):  0.2 us,  0.7 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

這是CPU使用率,其中us為用戶態(tài)使用占比,sy是系統(tǒng)態(tài)占比,ni是使用nice加權(quán)進(jìn)程分配的用戶態(tài)占比,id是空閑占比,wa是等待使用CPU占用,hi是硬中斷占比,si是軟中斷占比,st(steal)是虛擬機(jī)使用占比,這些項(xiàng)加起來應(yīng)為100%.

為了更好理解平均負(fù)載和CPU使用率,以高速公路收費(fèi)站來打個比喻,假設(shè)某高速收費(fèi)站有8個收費(fèi)口.
1.如果沒有車通過,那么收費(fèi)站的負(fù)載為0;
2.如果同時只有4輛車?yán)U費(fèi)通過,那么負(fù)載為4;
3.如果同時有8輛車,那么負(fù)載為8;
4.如果有8輛車在繳費(fèi),同時每個收費(fèi)口又有1輛車在等待,那么負(fù)載為16,這時候其實(shí)收費(fèi)站已過載;
5.如果有8輛車在繳費(fèi),同時每個收費(fèi)口還有(n-1)*8(n>3)輛車在等待,那么負(fù)載將會是n*8,這時候收費(fèi)站已嚴(yán)重過載,會出現(xiàn)嚴(yán)重?fù)矶?
這是平均負(fù)載,下面說說CPU使用率.
1.如果收費(fèi)口和車主全部使用ETC繳費(fèi),那么使用率很高;
2.如果某些收費(fèi)口使用人工收費(fèi),但支持微信或支付寶,車主只需要刷卡就走,準(zhǔn)備繳費(fèi)的時間不長,因此使用率也不低;
3.如果某些收費(fèi)口使用人工收費(fèi),但只能現(xiàn)金收費(fèi),那掏錢/找錢這些無用功占比就較高,這樣使用率就變得較低.

通過這個比喻可以看出,平均負(fù)載和使用率并沒有必然的關(guān)系,負(fù)載高CPU使用率不一定高,CPU使用率高負(fù)載并不見得會高.
下面是使用benchmarksql對PG進(jìn)行壓力下使用top的輸出:

top - 14:51:33 up  2:50,  3 users,  load average: 22.34, 9.89, 3.81
Tasks: 153 total,   7 running, 146 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.9 us,  5.2 sy,  0.0 ni, 23.3 id, 47.6 wa,  0.0 hi, 16.0 si,  0.0 st
KiB Mem :  3873760 total,   139744 free,   418508 used,  3315508 buff/cache
KiB Swap:  1048572 total,   969552 free,    79020 used.  2620448 avail Mem 
...
top - 14:49:49 up  2:49,  3 users,  load average: 14.47, 4.19, 1.48
Tasks: 153 total,   2 running, 151 sleeping,   0 stopped,   0 zombie
%Cpu0  : 20.2 us, 23.0 sy,  0.0 ni, 28.7 id, 19.9 wa,  0.0 hi,  8.2 si,  0.0 st
%Cpu1  : 13.5 us, 29.2 sy,  0.0 ni, 19.6 id, 28.5 wa,  0.0 hi,  9.3 si,  0.0 st
%Cpu2  : 12.9 us, 19.3 sy,  0.0 ni, 16.4 id, 11.1 wa,  0.0 hi, 40.4 si,  0.0 st
%Cpu3  : 15.1 us, 25.8 sy,  0.0 ni, 19.7 id, 29.4 wa,  0.0 hi, 10.0 si,  0.0 st
KiB Mem :  3873760 total,   133432 free,   435336 used,  3304992 buff/cache
KiB Swap:  1048572 total,   970816 free,    77756 used.  2601620 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                
10337 benchma+  20   0 4612656 222272   5376 S  42.7  5.7   0:40.99 java                   
10448 benchma+  20   0  789004  52556  20408 S  14.0  1.4   0:00.93 postgres               
10356 benchma+  20   0  757376 179348 176640 D   9.7  4.6   0:04.15 postgres               
10365 benchma+  20   0  757384 194680 191904 D   9.3  5.0   0:05.12 postgres               
10375 benchma+  20   0  757452 183908 181172 D   9.3  4.7   0:04.51 postgres               
10358 benchma+  20   0  757340 190880 188144 D   8.7  4.9   0:04.90 postgres               
10357 benchma+  20   0  757448 169860 167092 D   8.3  4.4   0:04.14 postgres               
10352 benchma+  20   0  757388 185012 182236 S   8.0  4.8   0:04.63 postgres               
10354 benchma+  20   0  757376 177416 174676 D   7.7  4.6   0:04.23 postgres               
10367 benchma+  20   0  757356 178524 175796 D   7.3  4.6   0:04.25 postgres      
...

可以看出近一分鐘的平均負(fù)載飆升到14.47,而CPU邏輯內(nèi)核個數(shù)不過4個,已超出系統(tǒng)負(fù)荷.
而CPU使用率中的us部分不過30%上下,大部分CPU在idle/wait上.

參考資料
Linux Load Averages: Solving the Mystery

分享題目:PostgreSQLDBA(88)-Linux(CPU使用率vs平均負(fù)載)
地址分享:http://muchs.cn/article14/jchgge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、搜索引擎優(yōu)化、企業(yè)建站、軟件開發(fā)、ChatGPT、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)