Linux下如何使用 dmesg 监控 IO使用高的程序

当我们的服务器在压力比较大的情况下,特别是磁盘 IO较高情况下,我们需要监视并找出磁盘 IO高的程序,并对此程序的参数进行调整或者优化代码,那么我们如何做到呢。
首先我们要开启 IO监控

sudo sysctl vm.block_dump=1

在开启 IO监控后,系统将记录程序对所有硬盘块的访问,其记录的结果我们可以通过 dmesg命令来查看。
一段时间后我们运行 dmesg,可能会得到类似如下的输出:
httpd(9370): dirtied inode 1961303 (index.html) on xvda
httpd(9370): dirtied inode 1961303 (index.html) on xvda
httpd(9370): WRITE block 38098704 on xvda (8 sectors)
httpd(9370): WRITE block 38098768 on xvda (8 sectors)
httpd(9370): WRITE block 38098824 on xvda (8 sectors)
httpd(9370): WRITE block 38098832 on xvda (8 sectors)
httpd(9370): WRITE block 38098840 on xvda (8 sectors)
httpd(9370): WRITE block 38098848 on xvda (8 sectors)

这里就有进程对块操作的信息,我们可以通过 awk进行统计,通过 sort排序

dmesg | awk -F " " '{print $1}'| sort | uniq -c | sort -rn | head -n 50

可能会有如下输出:

    518 httpd(9379):
    492 httpd(9358):
    482 httpd(9320):
    449 rsync(26564):
    417 httpd(9345):
    399 httpd(9370):
    374 kjournald(1249):
    166 flush-202:0(1781):
     70 httpd(9389):

在我们得到我们想要的结果之后,我们需要关闭 IO监控,运行如下命令:

sudo sysctl vm.block_dump=1

历史搜索记录:

Post a Comment

Your email is never shared. Required fields are marked *

*
*