Linux性能調(diào)優(yōu) | 01 平均負(fù)載的理解和分析

01 uptime命令

通常我們發(fā)現(xiàn)系統(tǒng)變慢時(shí),我們都會執(zhí)行top或者uptime命令,來查看當(dāng)前系統(tǒng)的負(fù)載情況搂鲫,比如像下面菠劝,我執(zhí)行了uptime,系統(tǒng)返回的了結(jié)果巍耗。

[root@lincoding ~]# uptime
 08:31:49 up 27 min,  1 user,  load average: 0.07, 0.04, 0.00

前幾列的信息,相信大家都很熟悉,它們分別是當(dāng)前時(shí)間怯邪、系統(tǒng)運(yùn)行時(shí)間和正在登陸的用戶個(gè)數(shù)允跑,最后一個(gè)就是系統(tǒng)平均負(fù)載的情況况木。

08:31:49                        // 當(dāng)前時(shí)間
up 27 min                       // 系統(tǒng)運(yùn)行時(shí)間
1 user                          // 正在登錄用戶數(shù)
load average: 0.07, 0.04, 0.00  // 平均負(fù)載的情況

Load Average的三個(gè)數(shù)字,依次則是過去1分鐘鸯旁、5分鐘、15分鐘的平均負(fù)載鸠删∪信荩可以通過觀察這三個(gè)數(shù)字的大小,可以簡單判斷系統(tǒng)的負(fù)載是下降的趨勢還是上升的趨勢墓怀。

  • 如果 load average: 1.00, 5.00, 10.00 三個(gè)數(shù)字依次增大捺疼,則說明在過去的 1 分鐘系統(tǒng)的負(fù)載比過去 15 分鐘系統(tǒng)的負(fù)載羞福,表明系統(tǒng)的負(fù)載是下降的趨勢。
  • 如果 load average: 10.00, 5.00, 1.00 三個(gè)數(shù)字依次降低逛拱,則說明在過去的 1 分鐘系統(tǒng)的負(fù)載比過去 15 分鐘系統(tǒng)的負(fù)載,表明系統(tǒng)的負(fù)載是上升的趨勢衍腥。
  • 如果 load average: 0.07, 0.04, 0.0 三個(gè)數(shù)字基本相同磺樱,或者相差不大, 表明系統(tǒng)的負(fù)載是平穩(wěn)的婆咸。

所以分析系統(tǒng)的負(fù)載情況竹捉,必須要看三個(gè)不同時(shí)間間隔的平均值。


02 平均負(fù)載概念

平均負(fù)載很多人容易理解成單位時(shí)間內(nèi)的 CPU 使用率尚骄,這是不正確的块差。平均負(fù)載確實(shí)與 CPU 使用率有關(guān)系,但不是直接的關(guān)系倔丈。

簡單來說憨闰,平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)不可中斷狀態(tài)的平均進(jìn)程數(shù)需五,也就是平均活躍進(jìn)程數(shù)鹉动,它和 CPU 使用率并沒有直接關(guān)系。

  • 可運(yùn)行狀態(tài)宏邮,是指正在使用 CPU 或者正在等待 CPU 的進(jìn)程泽示,也就是在 ps 命令看到的 R 狀態(tài)的進(jìn)程缸血。
  • 不可中斷狀態(tài),是指正處于內(nèi)核關(guān)鍵流程中的進(jìn)程械筛,并且這些流程是不可以打斷的捎泻,比如最常見的等待硬件設(shè)備的 I/O 響應(yīng),也就是在 ps 命令看到的 D 狀態(tài)的進(jìn)程埋哟。

因此笆豁,平均負(fù)載其實(shí)就是平均活躍進(jìn)程數(shù),可以更直觀的理解成單位時(shí)間內(nèi)的活躍進(jìn)程數(shù)定欧。

既然平均的是活躍進(jìn)程數(shù)渔呵,那么最理想的,就是每個(gè)CPU上剛好運(yùn)行著一個(gè)進(jìn)程砍鸠,這樣每個(gè)CPU就得到了充分利用扩氢。
比如當(dāng)平均負(fù)載為2時(shí),意味著:

  • 在只有 2 個(gè) CPU 的系統(tǒng)上爷辱,意味著所有的 CPU 都剛好被完全占用录豺。
  • 在4個(gè)CPU的系統(tǒng)上,意味著 CPU 有 50% 的空閑饭弓。
  • 在只有 1 個(gè) CPU 的系統(tǒng)中双饥,則意味著有一半的進(jìn)程競爭不到 CPU。

03 平均負(fù)載為多少時(shí)合理

在評判你當(dāng)前的系統(tǒng)平均負(fù)載是否合理的時(shí)弟断,首先你要知道系統(tǒng)有幾個(gè) CPU咏花,可以通過 lscpu 命令或者從文件 /proc/cpuinfo 中讀取

# lscpu 命令查看 CPU 個(gè)數(shù)
[root@lincoding ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4 # 這里數(shù)字表示 CPU 個(gè)數(shù)        
....

# 從文件 /proc/cpuinfo 中查看 CPU 個(gè)數(shù)
[root@lincoding ~]# grep 'model name' /proc/cpuinfo | wc -l
4

有了 CPU 個(gè)數(shù),我們就可以判斷出阀趴,當(dāng)平均負(fù)載比 CPU 個(gè)數(shù)還大的時(shí)候昏翰,系統(tǒng)已經(jīng)出現(xiàn)了過載。

這里我再舉個(gè)例子刘急,假設(shè)我們在一個(gè)單 CPU 系統(tǒng)上看到平均負(fù)載為 1.73棚菊,0.60,7.98

  • 在過去 1 分鐘內(nèi)叔汁,系統(tǒng)有 73% 的超載
  • 在過 15 分鐘內(nèi)统求,有 698%的超載,從整體趨勢來看据块,系統(tǒng)的負(fù)載在降低码邻。

平均負(fù)載高于 CPU 數(shù)量 70% 的時(shí)候,就應(yīng)該分析排查負(fù)載高的問題了瑰钮。一旦負(fù)載過高冒滩,就可能導(dǎo)致進(jìn)程響應(yīng)變慢,進(jìn)而影響服務(wù)的正常功能浪谴。


04 平均負(fù)載與 CPU 使用率

我們經(jīng)常容易把平均負(fù)載和 CPU 使用率混淆开睡,所以在這里,我也做一個(gè)區(qū)分苟耻。

再次說明下篇恒,平均負(fù)載是指單位時(shí)間內(nèi),處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù)凶杖。所以胁艰,它不僅包括了正在使用 CPU 的進(jìn)程,還包括等待 CPU等待 I/O 的進(jìn)程智蝠。

而 CPU 使用率腾么,是單位時(shí)間內(nèi) CPU 繁忙情況的統(tǒng)計(jì),跟平均負(fù)載并不一定完全對應(yīng)杈湾。比如:

  • CPU 密集型進(jìn)程解虱,使用大量 CPU 會導(dǎo)致平均負(fù)載升高,此時(shí)這兩者是一致的漆撞;
  • I/O 密集型進(jìn)程殴泰,等待 I/O 也會導(dǎo)致平均負(fù)載升高,但 CPU 使用率不一定很高浮驳;
  • 大量等待 CPU 的進(jìn)程調(diào)度也會導(dǎo)致平均負(fù)載升高悍汛,此時(shí)的 CPU 使用率也會比較高。

05 平均負(fù)載升高分析命令

我們現(xiàn)在很清楚的知道導(dǎo)致平均負(fù)載高的情況至会,不只是看 CPU 的使用率离咐,也要觀察系統(tǒng) I/O 等待時(shí)間高不高。

當(dāng)發(fā)現(xiàn)平均負(fù)載升高時(shí)奉件,可以使用 mpstat 命令查看 CPU 的性能宵蛀。

# -P ALL 表示監(jiān)控所有CPU,后面數(shù)字1表示間隔1秒后輸出一組數(shù)據(jù)
$ mpstat -P ALL 1
Linux 2.6.32-431.el6.x86_64 (lzc)   11/05/2019  _x86_64_    (2 CPU)

07:51:45 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
07:51:50 PM  all   42.90    0.00   49.39    0.41    0.00    4.56    0.00    0.00    2.74
07:51:50 PM    0   44.38    0.00   48.67    0.41    0.00    2.86    0.00    0.00    3.68
07:51:50 PM    1   41.57    0.00   49.80    0.40    0.00    6.43    0.00    0.00    1.81

從上面發(fā)現(xiàn)

  • CPU 的用戶層(%usr)使用率高達(dá)45%左右瓶蚂;
  • CPU 的系統(tǒng)層(%sys)使用率高達(dá)50%左右糖埋;
  • CPU 的 I/0 - 等待(%iowait)占用率為0.41%;
  • CPU 的空閑率(%idle)只有2~3%窃这。

可以推斷出是由于 CPU 使用率導(dǎo)致平均負(fù)載升高的情況瞳别。

假設(shè)只有 CPU 的I/0 等待(%iowait)占用率高,CPU 用戶層和系統(tǒng)層使用率很輕松杭攻,那么導(dǎo)致平均負(fù)載升高的原因就是 iowait 的升高祟敛。

判斷了是因?yàn)?CPU 使用率升高還是 iowait 升高導(dǎo)致平均負(fù)載升高后,我們還需要定位是哪個(gè)進(jìn)程導(dǎo)致的兆解」萏可以用 pidstat 來查詢:

# 間隔1秒后輸出一組數(shù)據(jù),-u表示CPU指標(biāo)
$ pidstat -u 1
08:07:55 PM       PID    %usr %system  %guest    %CPU   CPU  Command
08:07:56 PM         4    0.00    1.00    0.00    1.00     0  ksoftirqd/0
08:07:56 PM         9    0.00    1.00    0.00    1.00     1  ksoftirqd/1
08:07:56 PM        11    0.00   16.00    0.00   16.00     0  events/0
08:07:56 PM        12    0.00   20.00    0.00   20.00     1  events/1
08:07:56 PM       616    7.00    6.00    0.00   13.00     1  pppoe
08:07:56 PM      2745    6.00    6.00    0.00   12.00     1  pppoe

可以發(fā)現(xiàn)是 events/0events/1 內(nèi)核進(jìn)程 CPU 使用率非常高锅睛,所以可能這兩個(gè)進(jìn)程導(dǎo)致平均負(fù)載升高埠巨。


06 小結(jié)

平均負(fù)載提供了一個(gè)快速查看系統(tǒng)整體性能的手段历谍,反映了整體的負(fù)載情況。但只看平均負(fù)載本身辣垒,我們并不能直接發(fā)現(xiàn)望侈,到底是哪里出現(xiàn)了瓶頸。所以勋桶,在理解平均負(fù)載時(shí)脱衙,也要注意:

  • 平均負(fù)載高有可能是 CPU 密集型進(jìn)程導(dǎo)致的;
  • 平均負(fù)載高并不一定代表 CPU 使用率高例驹,還有可能是 I/O 更繁忙了捐韩;
  • 當(dāng)發(fā)現(xiàn)負(fù)載高的時(shí)候,你可以使用 mpstat鹃锈、pidstat 等工具荤胁,輔助分析負(fù)載的來源。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仪召,一起剝皮案震驚了整個(gè)濱河市寨蹋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扔茅,老刑警劉巖已旧,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異召娜,居然都是意外死亡运褪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門玖瘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秸讹,“玉大人,你說我怎么就攤上這事雅倒×Ь鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵蔑匣,是天一觀的道長劣欢。 經(jīng)常有香客問我,道長裁良,這世上最難降的妖魔是什么凿将? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮价脾,結(jié)果婚禮上牧抵,老公的妹妹穿的比我還像新娘。我一直安慰自己侨把,他們只是感情好犀变,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布妹孙。 她就那樣靜靜地躺著,像睡著了一般弛作。 火紅的嫁衣襯著肌膚如雪涕蜂。 梳的紋絲不亂的頭發(fā)上华匾,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天映琳,我揣著相機(jī)與錄音,去河邊找鬼蜘拉。 笑死萨西,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旭旭。 我是一名探鬼主播谎脯,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼持寄!你這毒婦竟也來了源梭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稍味,失蹤者是張志新(化名)和其女友劉穎废麻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體模庐,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烛愧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掂碱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜姿。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疼燥,靈堂內(nèi)的尸體忽然破棺而出沧卢,到底是詐尸還是另有隱情,我是刑警寧澤醉者,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布但狭,位于F島的核電站,受9級特大地震影響湃交,放射性物質(zhì)發(fā)生泄漏熟空。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一搞莺、第九天 我趴在偏房一處隱蔽的房頂上張望息罗。 院中可真熱鬧,春花似錦才沧、人聲如沸迈喉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挨摸。三九已至孩革,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間得运,已是汗流浹背膝蜈。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熔掺,地道東北人饱搏。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像置逻,于是被迫代替她去往敵國和親推沸。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容