如何找出Linux系統(tǒng)高IO的思路總結(jié)

前言

I/O Wait是一個(gè)需要使用高級(jí)的工具來debug問題原因儡陨,當(dāng)然也有許多基本工具的高級(jí)用法驶悟。I/O wait的問題難以定位的原因是:因?yàn)槲覀冇泻芏喙ぞ呖梢愿嬖V你I/O 受限了,但是并沒有告訴你具體是哪個(gè)進(jìn)程引起的邮辽。


1. 如何確認(rèn),是否是I/O問題導(dǎo)致系統(tǒng)緩慢


確認(rèn)是否是I/O導(dǎo)致的系統(tǒng)緩慢我們可以使用多個(gè)命令,但是镐躲,最簡單的是unix的命令 top

# top

top - 14:31:20 up 35 min, 4 users, load average: 2.25, 1.74, 1.68

Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie

Cpu(s): 2.3%us, 1.7%sy, 0.0%ni, 0.0%id, 96.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 245440k total, 241004k used, 4436k free, 496k buffers

Swap: 409596k total, 5436k used, 404160k free, 182812k cached

從CPU這行,可以發(fā)現(xiàn)CPU的io wait侍筛;這里是96.0%萤皂。越高就代表CPU用于io wait的資源越多。




2. 找出哪個(gè)磁盤正在被寫入

上邊的top命令從一個(gè)整體上說明了I/O wait匣椰,但是并沒有說明是哪塊磁盤影響的裆熙,想知道是哪塊磁盤引發(fā)的問題,可以使用另外一個(gè)命令 iostat 命令

$ iostat -x 2 5

avg-cpu: %user %nice %system %iowait %steal %idle

? 3.66 0.00 47.64 48.69 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 44.50 39.27 117.28 29.32 11220.94 13126.70 332.17 65.77 462.79 9.80 2274.71 7.60 111.41

dm-0 0.00 0.00 83.25 9.95 10515.18 4295.29 317.84 57.01 648.54 16.73 5935.79 11.48 107.02

dm-1 0.00 0.00 57.07 40.84 228.27 163.35 8.00 93.84 979.61 13.94 2329.08 10.93 107.02

iostat 會(huì)每2秒更新一次禽笑,一共打印5次信息入录, -x 的選項(xiàng)是打印出擴(kuò)展信息

第一個(gè)iostat 報(bào)告會(huì)打印出系統(tǒng)最后一次啟動(dòng)后的統(tǒng)計(jì)信息,這也就是說佳镜,在多數(shù)情況下僚稿,第一個(gè)打印出來的信息應(yīng)該被忽略,剩下的報(bào)告蟀伸,都是基于上一次間隔的時(shí)間蚀同。舉例子來說缅刽,這個(gè)命令會(huì)打印5次,第二次的報(bào)告是從第一次報(bào)告出來一個(gè)后的統(tǒng)計(jì)信息蠢络,第三次是基于第二次 衰猛,依次類推

所以,一定記咨部住:第一個(gè)忽略啡省!


在上面的例子中矗晃,sda的%utilized 是111.41%责嚷,這個(gè)很好的說明了有進(jìn)程正在寫入到sda磁盤中硕舆。

除了%utilized 外咆畏,我們可以從iostat得到更加豐富的資源信息噪矛,例如每毫秒讀寫請求(rrqm/s & wrqm/s))慈缔,每秒讀寫的((r/s & w/s)趴梢。在上邊的例子中噩峦,我們的項(xiàng)目看起來正在讀寫非常多的信息薪捍。這個(gè)對我們查找相應(yīng)的進(jìn)程非常有用笼痹。

3. 找出導(dǎo)致高IO的進(jìn)程

# iotop

Total DISK READ: 8.00 M/s | Total DISK WRITE: 20.36 M/s

? TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

15758 be/4 root 7.99 M/s 8.01 M/s 0.00 % 61.97 % bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp


最簡單的方法就是用iotop找出哪個(gè)進(jìn)程用了最多的存儲(chǔ)資源,從上面可以看到是bonnie++酪穿。

iotop很好用凳干,但是不是默認(rèn)安裝的。

如果沒有iotop被济,下面的方式也可以讓你有種方法縮小范圍救赐,盡快找到是哪個(gè)進(jìn)程。

ps 命令對內(nèi)存和CPU有一個(gè)統(tǒng)計(jì)只磷,但是他沒有對磁盤I/O的統(tǒng)計(jì)经磅,雖然他沒有顯示磁盤I/O,但是它顯示進(jìn)行的狀態(tài)钮追,我們可以用來知道一個(gè)進(jìn)程是否正在等待I/O

主要的進(jìn)程狀態(tài)有:

PROCESS STATE CODES

D uninterruptible sleep (usually IO)

R running or runnable (on run queue)

S interruptible sleep (waiting for an event to complete)

T stopped, either by a job control signal or because it is being traced.

W paging (not valid since the 2.6.xx kernel)

X dead (should never be seen)

Z defunct ("zombie") process, terminated but not reaped by its parent.


等待I/O的進(jìn)程的狀態(tài)一般是“uninterruptible sleep”预厌,或者“D”,我們可以很容易的查找到正在等待I/O的進(jìn)程

# for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done

D 248 [jbd2/dm-0-8]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

上邊的例子會(huì)循環(huán)的輸出狀態(tài)是D的進(jìn)程元媚,每5秒一次轧叽,一共10次

從輸出我們可以知道 bonnie++ 的pid是16528 ,在waiting刊棕,bonnie++看起來就是我們想找到的進(jìn)程炭晒,但是,只是從它的狀態(tài)甥角,我們沒有辦法證明就是bonnie++引起的I/O等待腰埂。

為了證明,我們可以可以查看/proc蜈膨,每個(gè)進(jìn)程目錄下都有一個(gè)叫io的文件屿笼,里邊保存這和iotop類似的信息。




# cat /proc/16528/io

rchar: 48752567

wchar: 549961789

syscr: 5967

syscw: 67138

read_bytes: 49020928

write_bytes: 549961728

cancelled_write_bytes: 0

read_bytes和write_bytes是這個(gè)進(jìn)程從磁盤讀寫的字節(jié)翁巍,在這個(gè)例子中驴一,bonnie++進(jìn)程讀取了46M的數(shù)據(jù)并且寫入了524MB的數(shù)據(jù)到磁盤上。


4. 找出哪個(gè)文件正在被大量寫入

lsof 命令可以展示一個(gè)進(jìn)程打開的所有文件灶壶。從這個(gè)列表中肝断,我們可以找到哪個(gè)文件被寫入。

# lsof -p 16528

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

bonnie++ 16528 root cwd DIR 252,0 4096 130597 /tmp

<truncated>

bonnie++ 16528 root 8u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 9u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 10u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 11u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 12u REG 252,0 501219328 131869 <strong>/tmp/Bonnie.16528</strong>

# df /tmp

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/mapper/workstation-root 7667140 2628608 4653920 37% /



# pvdisplay

? --- Physical volume ---

? PV Name /dev/sda5

? VG Name workstation

? PV Size 7.76 GiB / not usable 2.00 MiB

? Allocatable yes

? PE Size 4.00 MiB

? Total PE 1986

? Free PE 8

? Allocated PE 1978

? PV UUID CLbABb-GcLB-l5z3-TCj3-IOK3-SQ2p-RDPW5S

使用pvdisplay可以看到驰凛,pv設(shè)備就是/dev/sda5,正是我們前面找到的sda胸懈。


參考文檔:http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恰响,隨后出現(xiàn)的幾起案子趣钱,更是在濱河造成了極大的恐慌,老刑警劉巖胚宦,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件首有,死亡現(xiàn)場離奇詭異,居然都是意外死亡枢劝,警方通過查閱死者的電腦和手機(jī)井联,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來您旁,“玉大人烙常,你說我怎么就攤上這事『缀校” “怎么了蚕脏?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昨悼。 經(jīng)常有香客問我蝗锥,道長,這世上最難降的妖魔是什么率触? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任终议,我火速辦了婚禮,結(jié)果婚禮上葱蝗,老公的妹妹穿的比我還像新娘穴张。我一直安慰自己,他們只是感情好两曼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布皂甘。 她就那樣靜靜地躺著,像睡著了一般悼凑。 火紅的嫁衣襯著肌膚如雪偿枕。 梳的紋絲不亂的頭發(fā)上璧瞬,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音渐夸,去河邊找鬼嗤锉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛墓塌,可吹牛的內(nèi)容都是我干的瘟忱。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼苫幢,長吁一口氣:“原來是場噩夢啊……” “哼访诱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起韩肝,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對情侶失蹤触菜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后伞梯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玫氢,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谜诫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漾峡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喻旷,死狀恐怖生逸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情且预,我是刑警寧澤槽袄,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站锋谐,受9級(jí)特大地震影響遍尺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮拗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一乾戏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧三热,春花似錦鼓择、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抑堡,卻和暖如春摆出,著一層夾襖步出監(jiān)牢的瞬間朗徊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工懊蒸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荣倾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓骑丸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妒貌。 傳聞我的和親對象是個(gè)殘疾皇子通危,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 1.1 top: top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況 top命令...
    滿山李子閱讀 787評(píng)論 0 0
  • 觀其大綱 第1部分Linux的基礎(chǔ)知識(shí)第1章Linux概述第2章Linux系統(tǒng)的安裝KickStart開始自動(dòng)安裝...
    周少言閱讀 1,466評(píng)論 1 10
  • iotop命令是一個(gè)用來監(jiān)視磁盤I/O使用狀況的top類工具逆害。iotop具有與top相似的UI,其中包括PID蚣驼、用...
    Talon_1355閱讀 551評(píng)論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月魄幕,有人笑有人哭,有人歡樂有人憂愁颖杏,有人驚喜有人失落纯陨,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,531評(píng)論 28 53
  • 信任包括信任自己和信任他人 很多時(shí)候,很多事情留储,失敗翼抠、遺憾、錯(cuò)過获讳,源于不自信阴颖,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,187評(píng)論 4 8