如(rú)果你(nǐ)的(de)Linux服務器(qì)突然負載暴增,告警短(♣£εduǎn)信快(kuài)發爆你(nǐ)的(de)手機✔Ω<(jī),如(rú)何在最短(duǎn)時(shí)間(j✘×iān)內(nèi)找出Linux性能(néng)問(wèn)題所在?來☆'(lái)看(kàn)Netflix性能(néng)工(gōng)程團隊♠↑ε的(de)這(zhè)篇博文(wén),看(kàn)它們通(tōng)₽ ↑'過十條命令在一(yī)分(fēn)鐘(zhō>♦ng)內(nèi)對(duì)機(jī)器(qì)性能(néngλ&¶♥)問(wèn)題進行(xíng)診斷。
概述:通(tōng)過執行(xíng)以下(xià)命令,可(Ω®αkě)以在1分(fēn)鐘(zhōng)內(nδèi)對(duì)系統資源使用(yòng)情況有(yǒu)個♠€>'(gè)大(dà)緻的(de)了(le)解。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
其中一(yī)些(xiē)命令需要(yào)安裝sysstεat包,有(yǒu)一(yī)些(xiē)由©≥procps包提供。這(zhè)些(xiē)↓> ♠命令的(de)輸出,有(yǒu)助于快(kuài)速←>定位性能(néng)瓶頸,檢查出所有(yǒu∑✔←)資源(CPU、內(nèi)存、磁盤IO等)的(de)利用(→↓↑yòng)率(utilization)、飽和(hé)度(satuφ↓£☆ration)和(hé)錯(cuò)誤(error)度量,也(yě)就×γ(jiù)是(shì)所謂的(de)USE方法。
下(xià)面我們來(lái)逐一(yī)介紹下♠φ(xià)這(zhè)些(xiē)命令,有(yǒu)關這(zh ₹è)些(xiē)命令更多(duō)的(de)參數(shù)♣¥和(hé)說(shuō)明(míng),請(qǐng)參照(zhà→×λ o)命令的(de)手冊。
uptime
$ uptime 23:51:26 up 21:31,♦↔ 1 user, load©Ω average: 30.02, 26.43, 19.02
這(zhè)個(gè)命令可(kě)以快(ku>♠€ài)速查看(kàn)機(jī)器(qì)的(de)負載情況。在L÷±¶inux系統中,這(zhè)些(xiē)數(shù)據表示等待C$↕ §PU資源的(de)進程和(hé)阻塞在不(bù)可(kě)中斷IO進程(≠₹∑進程狀态為(wèi)D)的(de)數(shù)量。這(zhè)些(xi∞ Ωē)數(shù)據可(kě)以讓我們對(duì)系統資源使用(yòng)有("←yǒu)一(yī)個(gè)宏觀的(de)了(le)解。
命令的(de)輸出分(fēn)别表示1分(fēn)↕™™€鐘(zhōng)、5分(fēn)鐘(zh γλ ōng)、15分(fēn)鐘(zhōng)的(de)平均負載情況。©> 通(tōng)過這(zhè)三個(gè)數(shù)據←→₽₩,可(kě)以了(le)解服務器(qì)負載♦←£♥是(shì)在趨于緊張還(hái)是(shì)區(qū)域緩解©™。如(rú)果1分(fēn)鐘(zhōng)平均負載很(×↕∞hěn)高(gāo),而15分(fēn)鐘(z↓←✘hōng)平均負載很(hěn)低(dī),說(shuō)明(míng)•♣服務器(qì)正在命令高(gāo)負載情況,需要(yào)進一(yī)&₩步排查CPU資源都(dōu)消耗在了(le)哪裡(lǐ)。反之,如(rú)果∏↔15分(fēn)鐘(zhōng)平均負載€±很(hěn)高(gāo),1分(fēn)鐘(zhōng)平均負•÷載較低(dī),則有(yǒu)可(kě)能∑∏∏(néng)是(shì)CPU資源緊張時(shí)刻已經過去(q ÷♣ù)。
上(shàng)面例子(zǐ)中的(de)輸出,可(kě)以看(↑>kàn)見(jiàn)最近(jìn)1分(fēn)鐘(zhōng)的(d♥¶₽e)平均負載非常高(gāo),且遠(yuǎnδ¶)高(gāo)于最近(jìn)15分(fēn)鐘(zhōng)負載σ☆,因此我們需要(yào)繼續排查當前系統中β★有(yǒu)什(shén)麽進程消耗了(le)大(dà)量的(d•₽₩e)資源。可(kě)以通(tōng)過下(xià)文(wén)将會(h≈↑↓βuì)介紹的(de)vmstat、mpstat等命令進一(yī)步↔∏ 排查。
dmesg丨tail
$ dmesg | tail [1880957.563150] perl in€±♠₽voked oom-killer: gfp_mask=Ω↑σ0x280da, order=0, oom_scor&↓e_adj=0 [...] [1880957.563400] Ou∑₩γ↑t of memory: Kill process 18694 (perl)≥≈ score 246 or sacrifice child [1880≤¥✘957.563408] Killed pro ♠↓∑cess 18694 (perl) total-vm:1972392kB÷€♣, anon-rss:1953348kB, file-rss:0kB ✘€[2320864.954447] TCP: Possible SYN↓☆ flooding on port 7001. Dropping $€"request. Check SNMP counters♠¶Ω✔.
該命令會(huì)輸出系統日(rì)志(zhì)的(de)最© 後10行(xíng)。示例中的(de)輸出,可(kě)σ♣以看(kàn)見(jiàn)一(yī)次內(×↔nèi)核的(de)oom kill和(hé)↑¶一(yī)次TCP丢包。這(zhè)些(xΩ₽↑±iē)日(rì)志(zhì)可(kě)以幫→∏Ω>助排查性能(néng)問(wèn)題。千≠₩萬不(bù)要(yào)忘了(le)這(zhè)一(yī)步。
vmstat 1
$ vmstat 1 procs -------$∏®--memory---------- ---swap≥✔↔-- -----io---- -system-- ------cpu---¶ε®-- r b swpd free buε¥ff cache ¶→si so bi ε★ bo in cs us sy >★₹id wa st 34 0  ♠∑∏;0 200889792 73708 5Ω≥91828 0↕ ✘ 0 ₹♦× 0 5 &n'Ω≥£bsp; 6 10 96 δ♣φ 1 3 0 0 32 &φ 0 0 2008899γ÷<20 73708 591860 &n®↕©bsp; 0 0 &nbs↑↑'↓p; 0 592 13284 4282 98 1 §✔β 1 0  ♦☆®∏;0 32 0 &nb¶ sp;0 200890112 73708 5918↓¶↓60 0  ™ ♣;0 0 &nbs£×δp; 0 9501 2154 φ∏δ99 1 0 &nbσσ≠sp;0 0 32  ★★;0 0 200889568 &ε ♦nbsp;73712 591856 0  ₹≈™☆; 0 0  →∞≥;48 11900 2459 99  α&€∑;0 0 0 0 32×σΩ 0 0 200890208 &n€♦bsp;73712 591860 &n↕≤bsp;0 0 &nbs∞™p; 0 0 15898 4840 98 &nbs÷©p;1 1 0 0 ^C
vmstat(8) 命令,每行(xíng)↔會(huì)輸出一(yī)些(xiē)系統核心指标,這(zhè)些(xiē)§ ★¶指标可(kě)以讓我們更詳細的(de)了(le)解系φδ統狀态。後面跟的(de)參數(shù)1,表示¶€每秒(miǎo)輸出一(yī)次統計(jì)信↑✔息,表頭提示了(le)每一(yī)列的(de)含義,這(zhè)幾介紹一(♠₩yī)些(xiē)和(hé)性能(néng)調優相(xiàng)γπ✔≠關的(de)列:
r:等待在CPU資源的(de)進程數(shù)。這(z ∑™hè)個(gè)數(shù)據比平均負載更加能(nén©§≥•g)夠體(tǐ)現(xiàn)CPU負載情況,數(sλ♥hù)據中不(bù)包含等待IO的(de)進程。如(rú)果這(zhè)個(™☆gè)數(shù)值大(dà)于機(jī)器(qì)CPU ₽∑核數(shù),那(nà)麽機(jī)器(qì)的($÷de)CPU資源已經飽和(hé)。
free:系統可(kě)用(yòng)內(nèi)÷→₹→存數(shù)(以千字節為(wèi)單位),如(rú)果剩餘內(nèi)存 ε不(bù)足,也(yě)會(huì)導緻系統性能(néng)€☆↑©問(wèn)題。下(xià)文(wén)介紹到(dào)的(de)freπδδ∑e命令,可(kě)以更詳細的(de)了(le)解系統 ™→內(nèi)存的(de)使用(yòng)情況。
si, so:交換區(qū)寫入和(hé)讀(dú)取的(de∏→)數(shù)量。如(rú)果這(zhè$Ω)個(gè)數(shù)據不(bù)為(wèi)0,說(shuō)£'÷明(míng)系統已經在使用(yòng)交換區(qū)(swap),機(jī >)器(qì)物(wù)理(lǐ)內(nèi)存已經不(bù↓↕)足。
us, sy, id, wa, st:這(zhè)些(xi↔¥≤ē)都(dōu)代表了(le)CPU時(shí)間♣•(jiān)的(de)消耗,它們分(fēn)别表示用(yò€↑ng)戶時(shí)間(jiān)(user)、系統(內(nèi)★↕'→核)時(shí)間(jiān)(sys)、空(kōng)閑時(shí)₽≥β間(jiān)(idle)、IO等待時(shí)間±§←β(jiān)(wait)和(hé)被偷走∑™← 的(de)時(shí)間(jiān)(stolen,一(yī)般被其他(tāγ<γγ)虛拟機(jī)消耗)。
上(shàng)述這(zhè)些(xiē)CPU時(shí)間(jiān×),可(kě)以讓我們很(hěn)快(kuài)了(le)λ&解CPU是(shì)否出于繁忙狀态。一(""φ♣yī)般情況下(xià),如(rú)果用(✔♣£yòng)戶時(shí)間(jiān)和(hé)系統時(sε≤hí)間(jiān)相(xiàng)加非常♥♥¥大(dà),CPU出于忙于執行(xíng)指令。如(rú)果I↔ O等待時(shí)間(jiān)很(hěn)長(cháng),那(§∏♥↓nà)麽系統的(de)瓶頸可(kě)能(néng)在磁盤I<☆↓"O。
示例命令的(de)輸出可(kě)以看(kàn)見(jiàn),大(dà)量CP"¶εU時(shí)間(jiān)消耗在用(yòng)戶态,₽∞£γ也(yě)就(jiù)是(shì)用(yòng)戶應用¶π↓×(yòng)程序消耗了(le)CPU時(shí)間(jiān)。這(zhè✔¶©)不(bù)一(yī)定是(shì)性能(néng)問(wèn)題,需要(y✘$ào)結合r隊列,一(yī)起分(fēn)析。
mpstat-P ALL 1
$ mpstat -P ALL 1 Linu∞™♦x 3.13.0-49-generic (titan±clusters-xxxxx) 07/ $ε14/2015 _x86_64_ (32 CPU) 07:38↓$§:49 PM CPU %usπ↓↔r %nice %syγ♦÷s %iowait %irq %& soft %steal %σ✔guest %gnice &nbs£&∑p;%idle 07:38:50 PM &n☆ε™bsp;all 98.47 &nbs↓∏p; 0.00 0.75 ✔$ 0.00 0.00 0.00 &★©∏nbsp; 0.00 σ§ ® 0.00 0.00 λε™ 0.78 07:38:50 PM &n÷ bsp;0 96.04 0.00 ™ 2.97 0.00 &n♥π✘★bsp; 0.00 0.00 0.00♣× 0.00 0.00 &'✔'φnbsp; 0.99 07:38:50 PM  $↔;1 97.00 0.00  ↑≠✔; 1.00 0.00 &nb<₽'sp; 0.00 0.00  ♣♦≤;0.00 0.00☆ 0.00 ∑™Ωπ 2.00 07:38:50 PM &nb♠→≠ sp; 2 98.00 0.00 &≠♦™nbsp; 1.00 0.00 × ♠★ 0.00 0.00 £0.00 0.00∞↓γ£ 0.00 &nΩ>≤bsp; 1.00 07:38:50 PM &nb₩★sp;3 96.97 &nbs←<ε♦p; 0.00 0.00 &n₹αbsp;0.00 0.00 <$✘ 0.00 0.00 &nb∏×♠✘sp; 0.00  γ✘π ;0.00 3.03 [...]
該命令可(kě)以顯示每個(gè)CPU的(de)占用(yòngφ>✔)情況,如(rú)果有(yǒu)一(yī)個¶≈(gè)CPU占用(yòng)率特别高(gāo),那(✘¶♣nà)麽有(yǒu)可(kě)能(néng)是(shì)一(yī"'♣¥)個(gè)單線程應用(yòng)程序引起的(de)。
pidstat 1
$ pidstat 1 Linux 3.πΩ™♣13.0-49-generic (titanclusters-xxxx'εφ x) 07/14/2015 &×ε₽εnbsp;_x86_64_ $& (32 CPU) 07:41:02 ®&PM UID ↔∏ PID %u ∏•sr %system %guest &n>∞←bsp; %CPU CPU Co₩®₹×mmand 07:41:03 PM &•♠πnbsp; 0 9 &§&÷nbsp; 0.00 0.94 ™ ↑• 0.00 &nbs<>φ×p;0.94 1 &n&γ≥bsp;rcuos/0 07:41:03 PM   σ★; 0 421₽≈≠4 5.66  φ↓;5.66 0.00 &nbsα≥p; 11.32 15 me€♥←€sos-slave 07:41:03 PM &nbs¥←p; 0 4354 β☆" 0.94 0.94→σ 0.00 >∞λ™1.89 8 java 0÷•₹₩7:41:03 PM  ♠¥σ; 0  ♠Ω§;6521 1596.23 1.89 &nbs♥≤¶p; 0.00 1598.11 •₩∑σ27 java 07:41:03 PM &nb↓→sp; 0 φ★≈ 6564 1571.70  ♥ γε; 7.55 0.00 1579 ←.25 28 java 07≈"↔∏:41:03 PM 60004 &n☆®λbsp; 60154 0.94 α≤ 4.72 0.00  ↓↓>; 5.66 ✘₩ελ9 pidstat 07:41:03 PM¶☆§♣ UID &nb∞←♣sp; PID %usr %s✔♥ystem %guest &™¶→<nbsp;%CPU CPU &nbφπ←sp;Command 07:41:04 PM 0 ←∑¶ 4214 ≠∑♠♣ 6.00 &nΩ± bsp;2.00 0.00  ε↔₹ε;8.00 15<δ ¶ mesos-slave 07:41:04 PM &nbs≠$p; 0 &nb♦≈✘sp; 6521 1590.00 1.0α♣λ0 0.00 1591.0±∞0 27 java0•σ7:41:04 PM '™ 0 6564 1573∞₽<.00 10.00 0.0₽×↑ 0 1583.00  ♠♦ ;28 java 07:41:∏÷<∞04 PM 108  ♠♥; 6718 1.00 ↓ & 0.00 0.00 ×<↕ 1.00 ✘∏0 snmp-pass 07:41:04 PM 60004£± 60154 &nb∏♦sp; 1.00 γ∑'4.00 0.0'↕0 5.00 9π₹ pidstat ^C
pidstat命令輸出進程的(de)CP∞ U占用(yòng)率,該命令會(huì)持續輸出,并且≈∑×不(bù)會(huì)覆蓋之前的(de)數(shù)據,可(kě)以方★≈便觀察系統動态。如(rú)上(shàng)的(de)輸出,可(kě)←'以看(kàn)見(jiàn)兩個(gè)JAVA進程占用(yò"¥ ng)了(le)将近(jìn)1600%的(de)CP←↑$₹U時(shí)間(jiān),既消耗了(le)大(dà)約16個(gè"≥₹)CPU核心的(de)運算(suàn)資源。
iostat-xz 1
$ iostat -xz 1 Linux 3.13.0-49-g§¶eneric (titanclusters-✘ xxxxx) 07/14/2015 _¥★β™x86_64_ (32 CPU) avg-cpu: ♦↕%user %nice %system %iowait &¥λnbsp;%steal %idle &nb ↔sp; 73£™.96 0.00 &✔β↓∑nbsp;3.73 0.03 &n ✘÷↓bsp; 0.06 &nbs♣÷"p; 22.21 Device: rrqm₹≥↔/s wrqm/s σ r/s w/s rkB÷♥λΩ/s wkB/s avgrq-s₽>&z avgqu-sz await r_awa↓©it w_await svctm ααε©%util xvda ←"↕& 0.00 0ασ.23 0.21 &nbs☆ε☆p; 0.18 4.52 ∑ ∞₽ 2.08 &¥α'nbsp; 34.37 0.$>¶β00 9.98 &nb☆©Ωαsp; 13.80 5.42 &δ$nbsp; 2.44 0.09 xvdb  ©•α<; &nbs Ω↕€p;0.01 0.00  ¥; 1.02 8.9≤±₹λ4 127.97 ↕★♦∏598.53 145.79 0.0λ₹↓γ0 0.43 &nb→®₹sp; 1.78 0.28 &₽σ>nbsp; 0.25 0.25 xvdc &nb↔δsp; 0.01 &n∞↑bsp; 0.00 1.0Ω∑ ≈2 8.86 127.79 &±♥nbsp; 595.94 146.50 ↔ 0.00 0.45δ↕ 1.82 &π∑♥nbsp;0.30 0.27 0.26 dm-0 πε↑$ 0.00 &nbs→ δp; 0.00 &nbs>£→p;0.69 2.32 ±×÷ 10.47 31.69 &n×∏bsp; 28.01 0.01 &nb✔&φδsp; 3.23 0.71 ↕×β¶ 3.98 0.13 0.0∏γφ4 dm-1 &n<λβbsp;0.00 0.0♠®§≥0 0.00 &nb'≤•sp;0.94 0.01 ≤δ ☆ 3.78 8.00 ₩¥☆✘ 0.33 345φΩβ₹.84 0.04 &₽π∞nbsp;346.81 0.0β←1 0.00 dm-2 &n>₹ bsp; 0.00 0.δ'♦→00 0.09 &nbs•₹£₩p;0.07 1.35 &nbs™$↔p; 0.36 22.50 &✔←nbsp; 0.00 2.55 ∑♥↓¶ 0.23 &nbs₽&$∞p;5.62 1.78 0.03 [.♦©λ..] ^C
iostat命令主要(yào)用(yòng)于查看(kàn)機 ₽(jī)器(qì)磁盤IO情況。該命令輸出的(de)列,主要(yào)含義是 ∞(shì):
r/s, w/s, rkB/s, wkB/s:分(fēn)别表示每秒(ε≈←miǎo)讀(dú)寫次數(shù)和(hé)每•®秒(miǎo)讀(dú)寫數(shù)據量(千字節)±εδ。讀(dú)寫量過大(dà),可(kě)能(néng)φ 會(huì)引起性能(néng)問(wè ✘n)題。
await:IO操作(zuò)的(de)平均等待時(shí×≥)間(jiān),單位是(shì)毫秒(miǎo)。這(zhσ₽←è)是(shì)應用(yòng)程序在和(hé)磁盤交互時(sh↔₽∞"í),需要(yào)消耗的(de)時(sh♠★í)間(jiān),包括IO等待和(hé)實際操作(zuò)的(d$™₹e)耗時(shí)。如(rú)果這(zhè)個(gè)數(✔$shù)值過大(dà),可(kě)能(n÷"Ωéng)是(shì)硬件(jiàn)設備遇到(dào)了(l•¶e)瓶頸或者出現(xiàn)故障。
avgqu-sz:向設備發出的(de)請(qǐng)求平均數(☆Ωshù)量。如(rú)果這(zhè)個(gè)數(shù)值大(dà)于©♣1,可(kě)能(néng)是(shì)硬件(jiàn)設®λ €備已經飽和(hé)(部分(fēn)前端硬件(ji• '"àn)設備支持并行(xíng)寫入)。
%util:設備利用(yòng)率。這(zhè)個(gè)數(shù)₹©™值表示設備的(de)繁忙程度,經驗值是(shì)如(rú)果超過✔✔☆60,可(kě)能(néng)會(huì)影(yǐng)響IO£₹÷性能(néng)(可(kě)以參照(zhào)IO操作(z₹uò)平均等待時(shí)間(jiān))≤☆β。如(rú)果到(dào)達100%,說(shuō↓Ω©♥)明(míng)硬件(jiàn)設備已經飽®δλ和(hé)。
如(rú)果顯示的(de)是(shì)邏輯設備的(de)數(shù)© 據,那(nà)麽設備利用(yòng)率不(bù)代表後端實際的(de)硬件( σjiàn)設備已經飽和(hé)。值得(de)注意的(de)是(shì),即使I β★εO性能(néng)不(bù)理(lǐ)想,也(yě)不(bù)一(₽♦÷yī)定意味這(zhè)應用(yòng)程序性能(né☆¶&•ng)會(huì)不(bù)好(hǎo),可(kě)以利用(yòng)諸如♣→←(rú)預讀(dú)取、寫緩存等策略提升應用(yòng)性能(néng)。
free -m
$ free -m &nbs§←β≈p;  σ↑£'; total &nbsγ¥λ'p; used  ≥™'"; free ∞¥ shared buf&$fers cached Mem: ₹₹ 245998 ₩¶€£ 24545 221≥&≥453 83 &¥γ$♥nbsp; 59 &∏₹nbsp; 541 -₩→€¥/+ buffers/cache: &nb₹¥'sp;23944 22205≠×₹3 Swap: σ 0  ₩÷; 0 &n←←÷bsp; &nbs£↓≠δp; 0
free命令可(kě)以查看(kàn)系統內(nèi)存§↑的(de)使用(yòng)情況,-m參數(sh₽≠ù)表示按照(zhào)兆字節展示。最後兩列分(fēn)别表示用(yòng♠¶)于IO緩存的(de)內(nèi)存數(shù₩∞♥✔),和(hé)用(yòng)于文(wén)件(jià✔↕n)系統頁緩存的(de)內(nèi)存數(shùε✔✘←)。需要(yào)注意的(de)是(shì),第二行(xíng)-/+ buf♣→©↕fers/cache,看(kàn)上(shàng)去(qù)緩存占用(y↕↑òng)了(le)大(dà)量內(nèi)存空(kōng)間(jiān)♦♦σ。這(zhè)是(shì)Linux系統的(de)內(nèi)存使£₩用(yòng)策略,盡可(kě)能(néng)的(de)利用(yòng)→±≈¶內(nèi)存,如(rú)果應用(yòng)程序需要(yào)內(nè£Ω$i)存,這(zhè)部分(fēn)內(nèi)存會(huì)立即被回收并>€$分(fēn)配給應用(yòng)程序。因此< ✔,這(zhè)部分(fēn)內(nèi)存一(yī)₽ 般也(yě)被當成是(shì)可(kě)用(yòng)內(nèi)存。
如(rú)果可(kě)用(yòng)內(nèi)存非常少(shǎo),系統可¥←(kě)能(néng)會(huì)動用(yòng)交換區(q•™ū)(如(rú)果配置了(le)的(de)話(huà)∏≤),這(zhè)樣會(huì)增加IO開€ε≥(kāi)銷(可(kě)以在iostat命令中提現(xiàn))≈ε,降低(dī)系統性能(néng)。
sar -n DEV 1
$ sar -n DEV 1 Linux 3.13.♠¥0-49-generic (titanclusters-xxxxx) 07/14/2015 _x8 ≤αε6_64_ (32 CPU) 12:★♥16:48 AM ♦♦✘ IFACE rxpck/s t≈π>xpck/s rxkB/s ♦λ txkB/s rxcmp/s &nbs > λp; txcmp/s rxmcst/s %i futil 12:16:49 AM &nbs©σp; eth0 18763.00 Ω♥ 5032.00 206λ¥₩86.42 478.30 &n bsp; 0.00 0.★×≤✘00 0.00 &nb'™ sp; 0.00 12:16:49 AM  δΩ; lo &nb↔♥sp; 14.00 &nbs &p; 14.00 1.<φ36 1.36 &↕♣> 0.00 &∞↓nbsp; 0.00 &nb>™γsp;0.00 0.00 12↑>:16:49 AM docker0  ♠≠± ; 0.00 &∏★✔₹nbsp;0.00 0.00 &nλ ™≤bsp; 0.00 &n±≥bsp;0.00 0.00 &nbs∑βα₽p; 0.00 €≤ 0.00 12:16:49 AM &n♠✘≤bsp; IFACE ∏γ↑rxpck/s txpck/s  '≥ ;rxkB/s txkB/s rx ≠cmp/s txcmp/s rxmcs☆§☆αt/s %ifutil 12:16:50 AM↔'↕ eth0 &nbs✔₹φ€p;19763.00 5101.00 ★21999.10 482.56 < ↑ 0.00  ¶✘; 0.00  <₹;0.00 0δ←.00 12:16:50 AM ✔★ lo 20. ≈ ¶00 20.00  ♦♦♦; 3.25 &nbs ↓™βp; 3.25 ≤• 0.00 &nφ≠&bsp;0.00 0.00 &n&β'bsp; 0.®$εα00 12:16:50 AM dockerδ←0 0.00 &nb©×→•sp; 0.00  ✔≠φ; 0.00 ≠ π0.00 0.00 &nb¶∏♥♦sp; 0.00 &nb∞σ'¥sp; 0.00 &nbs↑¥p; 0.00 ^C
sar命令在這(zhè)裡(lǐ)可(kě)以查看¥₹✔φ(kàn)網絡設備的(de)吞吐率。在排查性能(néng)™ ₹問(wèn)題時(shí),可(kě)以通(tōng)過網絡©♥"設備的(de)吞吐量,判斷網絡設備是(shì)否已經飽和(hé)。•→★↕如(rú)示例輸出中,eth0網卡設備,吞吐率π©&大(dà)概在22 Mbytes/s,既176 Mbits/sec,沒有(≠ ≠ yǒu)達到(dào)1Gbit/sec的(de)硬件(jΩ€iàn)上(shàng)限。
sar -n TCP,ETCP 1
$ sar -n TCP,ETCP 1 Linux 3.13.0-×49-generic (titanclusters♣♠≈-xxxxx) 07/14/2015 ₹' _x86_64_ &'γ×nbsp; (32 CPU) 12:17:19 AM ₹γ active/s passive/±→s iseg/s &φ≥"∏nbsp;oseg/s 12:17:20 ≈γ≥AM 1.00  ★★★♦; 0.00 10233.00 &nσ₩bsp;18846.00 12:17:19 AM λ∏↔£ atmptf/s estres/s r♠♦ etrans/s isegerr/s &φ•©nbsp; orsts/s 12:17:20 AM α$ 0.00 &nβ≥'αbsp;0.00 0.00 ≠δ 0.00   ♣; 0.00 12:17:20₹ ≠♦ AM active/s passive/s &€↑®'nbsp; iseg/s os&↔≠≤eg/s 12:17:21 AM 1.' ≤00 0.00 8359 ¶ .00 6039.00 12:17:20 AM &n₩₽∏bsp;atmptf/s estre<φs/s retrans/s isegerr/s  ₽™♥ ; orsts/s 12:17:21 AM ↔↑↕ 0.00 &₹® nbsp;0.00 0.0π±₽∏0 0.0¥"♦ 0 0.00 ^C
sar命令在這(zhè)裡(lǐ)用(yòng)于查看(kà♦σ♦↕n)TCP連接狀态,其中包括:
active/s:每秒(miǎo)本地(dì'₹)發起的(de)TCP連接數(shù),既通(tōng)過connect調用≠÷'(yòng)創建的(de)TCP連接;
passive/s:每秒(miǎo)遠(yuǎn)★¥程發起的(de)TCP連接數(shù),即通(t±★∑ōng)過accept調用(yòng)創建的(de)TCP連接☆ ★;
retrans/s:每秒(miǎo)TCP重δπ₹±傳數(shù)量;
TCP連接數(shù)可(kě)以用(yòng)來(lái)判斷性能(£>↓↓néng)問(wèn)題是(shì)否由于建立了(le♥<♥≤)過多(duō)的(de)連接,進一(yī)步可(kě)以判斷≤₹是(shì)主動發起的(de)連接,還(hái)是(s®♥hì)被動接受的(de)連接。TCP重傳可(kě)能(néng)是σ✘(shì)因為(wèi)網絡環境惡劣,或者服務器(qì)壓÷∞α力過大(dà)導緻丢包。
top
$ top top - 00:15:40 up 21:56, ₹ 1 user, load average: 31.0✘♠9, 29.87, 29.92 Tasks: ₹∏871 total, 1 running, 868 sleepi£₽ng, 0 stopped, &nbs∞∏♠≠p; 2 zombie %Cpu(s): 96.8 us, & π•αnbsp;0.4 sy, 0.0 ni, &>☆nbsp;2.7 id, 0.1 wa, &nbs§&p;0.0 hi, 0.0 si, 0.0 stδε KiB Mem: 25190241↔®•+total, 24921688 used, 2269807¥Ω3+free, 60448δ™♦ buffers KiB Swap: &nbsσ£β₽p; 0 total, &nδ©bsp; 0 used, ££ ₩ 0♥λ free. 554208 cacheπ÷d Mem PID USER  ↓φφ™; PR NI &nbsπ←p;VIRT RES  •≠≠; SHR S %CPU %&✘MEM TIME+ COMMAND≤§λ™ 20248 root &nb±λ€↓sp;20 0 0.2£↔>δ27t 0.012t 18748 S 3090 &→≥"nbsp;5.2 29812:58 java 42Ωσ ♣13 root 20 &β$₽nbsp; 0 2722544 64 ≤✔α640 44232 S 23.§≈5 0.0 233:35.37 mesos-s ±σπlave 66128 titancl+ 20•↑ 0 243↑₩♠44 2332 11π§→€72 R 1.0 0.0 0:0↔÷≤✘0.07 top 5235 roo£₹∑₽t 20 0 3₹₽§8.227g 547004 499≥↕96 S 0.7 0♦∞.2 2:02.74 java₩¶€¥ 4299 root &nb→₽γ§sp; 20 0 20.0↔&↑★15g 2.682g 16836 S 0 ←.3 1.1 33:14.4σε←"2 java ↕≈↕1 root 20 0♥εφ 33620 ∑ 2920 1496 S &nb↓sp; 0.0 0.0 0:03.82 ini₩≥t 2 roo∞φt 20 &←≠€nbsp; 0 0 ε♥γ 0 &n₽≤αbsp; 0 S &n✔→♠↔bsp; 0.0 0.0 0:∑00.02 kthreadd 3 root &nb↓≥sp; 20 0 &n♠φ←bsp; 0 &n≤÷bsp;0 λ ×₽0 S 0.0 0.0 0:05εα.35 ksoftirqd/0 &n☆★↑bsp; 5 root &nb ε∏sp; 0 -20 &nbs ₹$p; 0 σ↓€ 0 0 S ₩$ 0.0 0.0   αΩδ; 0:00.00 kworker/0:0H &♣ $nbsp; 6 root ☆♣ 20 0 &n"γ✘✘bsp; 0 &nbsσ™™p; 0  ®£€; 0 S 0.0 0.0 →✘δ☆ 0:06.94 kworker/u256:0 &nb&&Ωsp; 8 root 20'α 0 0 &nbs₽★≥≈p; 0 &nb€₹∏βsp; 0 S 0.0 ×←0.0 2:38.05 rcu_sched
top命令包含了(le)前面好(hǎo)幾< σ個(gè)命令的(de)檢查的(de)內(nèβ✔<→i)容。比如(rú)系統負載情況(uptime)、系統內(nèΩΩ≠βi)存使用(yòng)情況(free)、系統C₽÷≠•PU使用(yòng)情況(vmstat)等。因≥¶↓此通(tōng)過這(zhè)個(gè)命令,可(kě)₽'以相(xiàng)對(duì)全面的(d ✔↔↓e)查看(kàn)系統負載的(de)來(l πái)源。同時(shí),top命令支持排序,可(kě)以按照(®γ↑zhào)不(bù)同的(de)列排序,方便查找出諸如(rú)內(n' ↓èi)存占用(yòng)最多(duō)的(de)進程、CPU∑ Ωε占用(yòng)率最高(gāo)的(de)進程等。<
但(dàn)是(shì),top命令相(xiàng)對(duì)≥♦↓于前面一(yī)些(xiē)命令,輸出是(shì)一(yī)個(gè)瞬間(j'®β•iān)值,如(rú)果不(bù)持續盯著(zhe),可(kě)ε"↕★能(néng)會(huì)錯(cuò)過一(yī)些(x£β¶±iē)線索。這(zhè)時(shí)可(kě)能(néng)↑↑π✘需要(yào)暫停top命令刷新,來(lái)記錄和(hé)比對(du ≥ì)數(shù)據。
總結
排查Linux服務器(qì)性能(néng)問(wèn)題還(↓'hái)有(yǒu)很(hěn)多(duō)工(gōng)具,上(shàn ™g)面介紹的(de)一(yī)些(xiē)命令,可(kě)以幫助我們快(ku β×ài)速的(de)定位問(wèn)題。例如(rú)前面的(de)示例輸₩∑出,多(duō)個(gè)證據證明(míng)有(§±™♦yǒu)JAVA進程占用(yòng)了(l¥&e)大(dà)量CPU資源,之後的(de)性能≤♥(néng)調優就(jiù)可(kě)以針對♥≈(duì)應用(yòng)程序進行(xíng)。