本文共 1881 字,大约阅读时间需要 6 分钟。
哪些进程这在对写?试试。但是有时候并不方便安装部署,而且的输出也容易进一步分析处理。
那么,有没有其他方式方便做到这一点呢?有。在说出答案前,我们先看看一个实际文件的内容
rchar: 951610978wchar: 1180044763syscr: 133011syscw: 120643read_bytes: 77246464write_bytes: 735604736cancelled_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
以上两个命令的执行示例如下
root@demo:~# 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 -2028908475231 15022495635 13093647776277 9061537484053 18061091171589 1388955070588 31283445533142 1458325857806 920148582179 89375633008 972975169817 206874541144 203874355216 206773356682 208570308680 207350819715 187348753553 208048556521 143647121818 170941993240 29162root@demo:~# 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 1180115284 31283502324828 1488319291 90694696438 130961642095 145841535896 89339210225 2916215680109 13599482873 20685626696 17565545914 17094047538 16772944955 4782602756 196482065398 223882060970 223891816383 196441687956 13071548644 196471545858 19645root@demo:~#
转载地址:http://ciyyo.baihongyu.com/