阅读512 返回首页    go 阿里云 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  二手域名价值三招认定法