今天發現備份用的伺服器,突然變的很忙碌,使用遠端 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 查看當前的值。
沒有留言:
發佈留言