星期四, 5月 08, 2014

在linux中找出哪個進程最耗 iowait

今天發現備份用的伺服器,突然變的很忙碌,使用遠端 SSH 登入操作也變的很緩慢,



使用 #top 指令查詢,發現是 kjournald 用來 控管 EXT3檔系統的日誌進程佔掉很高的 CUP 資源。最後參考網路上的這篇文章,解決了問題









1. 找出CPU佔用率高的線程

ps H -eo user,pid,ppid,tid,time,psr,%cpu,cmd --sort=%cpu

參數'H'顯示線程相關的資訊,格式輸出中包含:user,pid,ppid,tid,time,%cpu,cmd,然後再用%cpu欄位進行排序



2. 找出耗iowait的進程

先停掉syslog

service syslog stop

打開block dump:

echo 1 > /proc/sys/vm/block_dump

多次運行,查看結果

dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head

排前的比較佔用io

抓完後關掉block_dump和啟動syslog:

echo 0 > /proc/sys/vm/block_dump

service syslog start

實踐發現,這樣找出的進程一般為kjournald、pdflush、kswapd0。



3. pidstat

# pidstat -d 5

Linux 2.6.26-2-openvz-686 (pro-12-gl.savonix.com) 10/29/2009 _i686_ (2 CPU)

11:19:41 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command

11:19:46 PM 1895 0.00 23.06 0.00 kjournald

11:19:56 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command

11:20:01 PM 423 0.00 0.80 0.00 apache2

11:20:01 PM 1851 0.00 0.80 0.00 nginx

11:20:01 PM 1895 0.00 8.80 0.00 kjournald



然後可以使用top命令查看進程對應的物理CPU:

執行top後,按f,再選擇j: P Last used cpu (SMP) ,再按 Enter 回到top介面



注:進程kjournald、pdflush、kswapd0的作用



1.kswapd0

系統每過一定時間就會喚醒kswapd,看看記憶體是否緊張,如果不緊張,則睡眠,在kswapd中,有2個閥值,pages_hige和pages_low,當空閒記憶體頁的數量低於pages_low的時候,kswapd進程就會掃描記憶體並且每次釋放出32個free pages,直到free page的數量到達pages_high.



2.kjournald

EXT3檔系統的日誌進程,具有3種模式:

記錄所有檔系統上的元資料改變,最慢的一種模式。

默認使用的模式,只記錄檔系統改變的元資料,並在改變之前記錄日誌。

最快的一種模式,同樣只記錄修改過的元資料,依賴標準檔系統寫進程將資料寫到硬碟。

修改模式EXT3的工作模式;

vim /etc/fstab

/dev/hda5 /opt ext3 data=writeback 1 0

詳細介紹請參考: http://www.linuxplanet.com/linuxplanet/reports/4136/5/





PS 這部份 我沒有照著做,系統已回復正常。只是 重新啟動 syslog 這支服務。



3.pdflush

pdflush用於將記憶體中的內容和檔系統進行同步,比如說,當一個檔在記憶體中進行修改,pdflush負責將它寫回硬碟.每當記憶體中的垃圾頁(dirty page)超過10%的時候,pdflush就會將這些頁面備份回硬碟.這個比率是可調節的,通過/etc/sysctl.conf中的 vm.dirty_background_ratio項 預設值為10 也可以。

cat /proc/sys/vm/dirty_background_ratio 查看當前的值。




















沒有留言: