Linux 性能診斷:負(fù)載評(píng)估 (v2)

概要:負(fù)載診斷流程

  • 觀察load average (平均負(fù)載)
  • 觀察CPU、I/O是否存在瓶頸

從load avgerage等總括性的數(shù)據(jù)著手叁巨,參考CPU使用率和I/O等待時(shí)間等具體的數(shù)字蜂林,從而自頂向下快速排查各進(jìn)程狀態(tài)送粱。

perf-flow

概念:什么是負(fù)載?

負(fù)載可以分為兩大部分:CPU負(fù)載似谁、I/O 負(fù)載 哼蛆。

load average

uptime
top
cat /proc/loadavg
load average:0.65, 1.49, 1.76  (負(fù)載很低)
load average:3.49, 3.67, 3.75  (負(fù)載一般)
load average:33.20, 18.39, 15.21 (負(fù)載高)
load average:70.25, 80.50, 95.38 (負(fù)載非常高构拳,需要干預(yù))

load average:7.89, 11.42, 13.42  (當(dāng)前負(fù)載趨于下降)
load average:17.89, 13.28, 4.45 (當(dāng)前負(fù)載趨于上升)

依次時(shí)過去1分鐘咆爽,5分鐘,15分鐘內(nèi)置森,單位時(shí)間的等待任務(wù)數(shù)斗埂,也就是表示平均有多少任務(wù)正處于等待狀態(tài)。在load average較高的情況下凫海,就說明等待運(yùn)行的任務(wù)較多呛凶,因此輪到該任務(wù)運(yùn)行的等待時(shí)間就會(huì)出現(xiàn)較大延遲,即反映了此時(shí)負(fù)載較高行贪。

linux內(nèi)核的進(jìn)程調(diào)度器(Process Scheduler)

負(fù)責(zé)決定任務(wù)運(yùn)行的優(yōu)先級(jí)漾稀,以及讓任務(wù)等待或使之重新開始等核心工作。調(diào)度器劃分并管理進(jìn)程(Process)的狀態(tài)建瘫。例如:

等待分配CPU資源的狀態(tài)

等待磁盤輸入輸出完畢的狀態(tài)

process-flow.png

進(jìn)程描述符的狀態(tài)

|進(jìn)程狀態(tài)|PS Stat|說明|
|------|-----------------|
|TASK_RUNNING|R(Run)|運(yùn)行狀態(tài)崭捍。只要CPU空閑,隨時(shí)都可以開始啰脚。|
|TASK_INTERRUPTIBLE|S(Sleep)|可中斷的等待狀態(tài)殷蛇。例如系統(tǒng)睡眠或來自于用戶輸入的等待等。|
|TASK_UNINTERRUPTIBLE|D(Disk Sleep)|不可中斷的等待狀態(tài)。主要為短時(shí)間恢復(fù)時(shí)的等待狀態(tài)粒梦。例如磁盤輸入輸出的等待|
|TASK_STOPPED||響應(yīng)暫停信號(hào)而運(yùn)行中斷的狀態(tài)亮航。直到恢復(fù)(Resume)前都不會(huì)被調(diào)度|
|TASK_ZOMBIE|Z(Zombie)|僵死狀態(tài)。雖然子進(jìn)程已經(jīng)終止(exit),但父進(jìn)程尚未執(zhí)行wait(),因此該進(jìn)程的資源沒有被系統(tǒng)釋放|

  • TASK_RUNNING正在運(yùn)行
  • TASK_RUNNING (等待狀態(tài)匀们,加權(quán)換算)
  • TASK_INTERRUPTIBLE(等待狀態(tài)缴淋,加權(quán)換算)
  • TASK_UNINTERRUPTIBLE(等待狀態(tài),不加權(quán)換算)

load average 表示“等待進(jìn)程的平均數(shù)”泄朴,除了“TASK_RUNNING正在運(yùn)行”宴猾,其它三個(gè)都是等待狀態(tài)。TASK_INTERRUPTIBLE不被換算叼旋。即只換算“雖然需要即刻運(yùn)行處理仇哆,但是無論如何都必須等待”。

load average所描述的負(fù)載就是:需要運(yùn)行處理夫植,但又必需等待隊(duì)列前的進(jìn)程處理完成的進(jìn)程個(gè)數(shù)讹剔。具體來說:要么等待授予CPU運(yùn)行權(quán)限,要么等待磁盤I/O完成详民。

  • 內(nèi)核函數(shù):kernei/timer.c的calc-load();
  • 調(diào)用周期:每次計(jì)時(shí)器中斷(centos為4ms)

CPU 還是 I/O ?

load average的數(shù)字只是表示等待的任務(wù)數(shù)延欠,僅根據(jù)load average并不能判斷具體是CPU負(fù)載高還是I/O負(fù)載高。

CPU密集型程序

I/O密集型程序

Sar (System Activity Reporter)

CPU使用率和I/O等待時(shí)間都是在不斷變化的沈跨,可以通過sar 命令來確認(rèn)這些指標(biāo)由捎。該工具包含在sysstat軟件包內(nèi)。

$ sar
Linux    04/17/16        _x86\_64_        (24 CPU)
00:00:01        CPU     %user     %nice   %system   %iowait    %steal     %idle
00:10:02        all      1.26      0.00      0.55      0.00      0.00     98.19
00:20:01        all      1.58      0.00      1.04      0.00      0.00     97.38
00:30:01        all      1.23      0.00      0.56      0.00      0.00     98.21
00:40:01        all      1.59      0.00      1.01      0.00      0.00     97.40
00:50:01        all      1.35      0.00      0.59      0.00      0.00     98.06
01:00:01        all      1.63      0.00      1.10      0.00      0.00     97.27
01:10:01        all      1.22      0.00      0.54      0.00      0.00     98.24
01:20:01        all      1.68      0.00      1.06      0.00      0.00     97.25
01:30:01        all      1.23      0.00      0.54      0.00      0.00     98.23
$ sar 1 10
18:54:58    %usr    %sys    %wio   %idle
18:54:59      18       3       0      79
18:55:00      46      14       0      40
18:55:01      38      13       0      49
18:55:02      17       4       0      79
18:55:03      11       4       0      85
18:55:04      12       5       0      83
18:55:05      20       4       0      76
18:55:06      22       3       0      75
18:55:07      21       4       0      75
18:55:08      17       4       0      79

輸出參數(shù):

  • %user:用戶(一般的應(yīng)用軟件運(yùn)作模式)CPU資源
  • %system:系統(tǒng)(內(nèi)核運(yùn)作)占用CPU資源
  • %iowait:I/O等待率饿凛。

進(jìn)程詳細(xì)

$ ps auxw
test 1551 0.2 0.1 6452 4776 ? S 19:25 0:00  Test.pl CTP00004.PRS00034 1 300
test 1553 2.6 0.4 18196 16424 ? S 19:25 0:00  /Test.pl 00001.PRS00034
test 1555 2.6 0.4 18168 16396 ? S 19:25 0:00  /Test.pl 00002.PRS00034
test 1557 2.8 0.4 18132 16432 ? S 19:25 0:00  /Test.pl 00004.PRS00034
test 1606 0.0 0.0 50060 916 ? Sl 19:25 0:00 /bin/PingTest -f CTP00004
test 1612 2.5 0.4 18156 16452 ? S 19:25 0:00  /Test.pl 00014.PRS00034
test 1629 2.1 0.4 18416 16696 ? S 19:25 0:00  /Test.pl 00015.PRS00034
test 2253 2.7 0.3 12868 11160 ? R 19:25 0:00  -w mrtg MRTG\_00027.cfg log
test 2254 3.6 0.3 12864 11184 ? S 19:25 0:00  -w mrtg MRTG\_00028.cfg log
test 2261 2.4 0.2 12640 11004 ? S 19:25 0:00  -w mrtg MRTG\_00030.cfg log

輸出參數(shù):

  • %CPU:該進(jìn)程的CPU使用率
  • %memb:物理內(nèi)存百分比
  • VSZ狞玛、RSS:虛擬/物理內(nèi)存
  • STAT:進(jìn)程狀態(tài)(非常重要)
  • TIME:CPU占用時(shí)間

SWAP吞吐

$sar -W
17:20:01     pswpin/s pswpout/s
17:30:01         0.00      0.00
17:40:01         0.00      0.00
17:50:01         0.00      0.00
18:00:01         0.00      0.00
18:10:01         0.00      0.00
18:20:01         0.00      0.00
18:30:01         0.00      0.00
18:40:01         0.00      0.00
18:50:02         0.00      0.00
19:00:01         0.00      0.00
19:10:02         0.00      0.00
Average:         0.00      0.00

輸出參數(shù):

  • pswpin/s:每秒系統(tǒng)換入的頁面數(shù)
  • pswpout/s:每秒系統(tǒng)換出的頁面數(shù)

發(fā)生頻繁的交換時(shí),服務(wù)器的吞吐量性能會(huì)大幅下降涧窒。

vmstat(Report Virtual Memory Statistics)

實(shí)時(shí)確認(rèn)CPU使用率及實(shí)際的I/O等待時(shí)間

$ vmstat
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s2 s2 s2 s2   in   sy   cs us sy id
 0 0 0 45411448 17973032 140 1470 13 41 33 0 0 -0 -0 -0 -0 2753 313459 4984 16 3 81

解決方案

優(yōu)化的真正工作是“找出系統(tǒng)瓶頸并加以解決”心肪,我們所能做的就是“充分發(fā)揮硬/軟件本來的性能,解決可能存在的問題”纠吴。例如硬鞍,同樣是I/O問題,我們可以通過增加內(nèi)存來緩解戴已,也可以調(diào)整調(diào)度方案來優(yōu)化(時(shí)間換空間)固该,但是更多的情況是,優(yōu)化應(yīng)用程序的I/O算法效果更佳糖儡。

最后伐坏,重溫一句經(jīng)典格言

別臆斷,請(qǐng)監(jiān)控

擴(kuò)展閱讀:Linux 操作系統(tǒng)

推薦:電子書《Linux Perf Master》

發(fā)表在GitBook平臺(tái)休玩,歡迎訂閱著淆、下載、批評(píng)指正:

https://www.gitbook.com/book/riboseyim/linux-perf-master/details

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拴疤,一起剝皮案震驚了整個(gè)濱河市永部,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呐矾,老刑警劉巖苔埋,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蜒犯,居然都是意外死亡组橄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門罚随,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玉工,“玉大人,你說我怎么就攤上這事淘菩∽癜啵” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵潮改,是天一觀的道長狭郑。 經(jīng)常有香客問我,道長汇在,這世上最難降的妖魔是什么翰萨? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮糕殉,結(jié)果婚禮上亩鬼,老公的妹妹穿的比我還像新娘。我一直安慰自己阿蝶,他們只是感情好辛孵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赡磅,像睡著了一般魄缚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焚廊,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天冶匹,我揣著相機(jī)與錄音,去河邊找鬼咆瘟。 笑死嚼隘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袒餐。 我是一名探鬼主播飞蛹,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼谤狡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卧檐?” 一聲冷哼從身側(cè)響起墓懂,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霉囚,沒想到半個(gè)月后捕仔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盈罐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年榜跌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盅粪。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钓葫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出票顾,到底是詐尸還是另有隱情瓤逼,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布库物,位于F島的核電站霸旗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏戚揭。R本人自食惡果不足惜诱告,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望民晒。 院中可真熱鬧精居,春花似錦、人聲如沸潜必。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磁滚。三九已至佛吓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垂攘,已是汗流浹背维雇。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晒他,地道東北人吱型。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像陨仅,于是被迫代替她去往敵國和親津滞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铝侵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349