閱讀512 返回首頁    go 技術社區[雲棲]


Linux係統小技巧(5):如何列出和排序正在讀寫的進程?

哪些進程這在對寫?試試iotop。但是有時候並不方便安裝部署iotop,而且iotop的輸出也容易進一步分析處理。

那麼,有沒有其他方式方便做到這一點呢?有。在說出答案前,我們先看看一個實際/proc//io文件的內容

rchar: 951610978
wchar: 1180044763
syscr: 133011
syscw: 120643
read_bytes: 77246464
write_bytes: 735604736
cancelled_write_bytes: 98304

根據內核文檔,*rchar*和*wchar*即是進程已經提交但還沒有完成的的讀寫操作要處理的內容。因此逐一遍曆進程,即可計數正在讀寫的進程並且予以適當排序。

比如,列出正在發起讀操作的前20個進程,我們可以這樣辦理

for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do if [ -e /proc/${pid} ];then num=$(cat /proc/${pid}/io | grep -E '^rchar:' | cut -d ' ' -f 2);echo "${num} ${pid}";fi;done | sort -n -r | head -20 

當然,上麵的命令稍加改動就可以用到正在寫的進程上

for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do if [ -e /proc/${pid} ];then num=$(cat /proc/${pid}/io | grep -E '^wchar:' | cut -d ' ' -f 2);echo "${num} ${pid}";fi;done | sort -n -r | head -20 

最後更新:2017-07-26 18:04:12

  上一篇:go  Linux問題情報分享(1):內核Stack Clash補丁導致Java程序啟動失敗
  下一篇:go  二手域名價值三招認定法