教你在linux中找出哪个进程最耗iowait

发布时间:2019-08-29编辑:脚本学堂
教你在linux中找出哪个进程最耗iowait

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:46 PM      7309      0.00      0.80      0.00  syslog-ng
11:19:46 PM     21404      0.00      0.80      0.00  tlsmgr
11:19:46 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
11:19:51 PM     18208      0.00      0.80      0.00  syslog-ng
11:19:51 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
11:19:56 PM      1895      0.00      9.60      0.00  kjournald
11:19:56 PM     17120      0.00      1.60      0.00  tlsmgr
11:19:56 PM     27257      0.00      1.60      0.00  apache2
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) ,再按回车回到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/

3.pdflush
pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.这个比率是可调节的,通过/etc/sysctl.conf中的 vm.dirty_background_ratio项 默认值为10 也可以。

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