我如何监视Linux上的硬盘负载?

有没有一个很好的命令行工具来监视Linux上的硬盘负载? 像top ,然后监视磁盘活动iso cpu使用情况。

更具体地说,我怀疑对于一些(重负载)服务器,在其上运行的程序的各个部分进行了几次优化之后,现在瓶颈只是logging到磁盘上的文件。 但是我发现很难评估服务器可以处理多lessstream量。

我的理想工具是打印出“您现在使用35%的磁盘带宽”。 有任何想法吗?

    您可以使用iostat工具获得相当不错的效果。

     % iostat -dx /dev/sda 5 Device: rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.78 11.03 1.19 2.82 72.98 111.07 45.80 0.13 32.78 1.60 0.64 

    磁盘利用率列在最后一列。 这被定义为

    向设备发出I / O请求的CPU时间百分比(设备的带宽利用率)。 当此值接近100%时,会发生设备饱和。

    iotop是顶级版本,用于查看每个进程使用多lessIO。 这是在标准的Ubuntu的仓库; 我不知道它是在RHEL还是在Fedora,但应该是。

    在这里输入图像描述

    对于不支持iotop的旧内核(比如说CentOS 5.x或者RHEL 5.x),可以使用topio来代替( http://yong321.freeshell.org/freeware/pio.html#linux 。它依赖于/ proc // io for io统计信息,并提供与iotop相似的function。有关详细信息,请参阅链接。

    正如sastanin在注释中所build议的那样,您可以直接处理/sys/block/sda/stat/proc/diskstats 。 如果没有其他提到的工具可用,并且无法轻松安装,这可能会有所帮助。

    例如(IIUC)像这样(在bash中)应该给每秒的读数:

     OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed DT=1 for ii in `seq 1 10` do sleep $DT NEW=`awk '{print $1}' /sys/block/sda/stat` echo $((($NEW-$OLD)/$DT)) OLD=$NEW done 

    有关文档,请参阅https://www.kernel.org/doc/Documentation/iostats.txt和https://www.kernel.org/doc/Documentation/block/stat.txt

    您应该看一看top,它结合了iotop / top / iftop的function,集中在一个地方,并突出显示系统中的关键部分。

    找出你的总带宽是多less你可以用hdparm -T /dev/sda来testing缓冲区caching(fileio)的性能hdparm -t /dev/sda来testing设备的读取性能

    例子:我的笔记本电脑从SATA磁盘获得82MB /秒,从caching获得2GB /秒。 我的dekstop从caching中获得12GB /秒,在硬盘RAIDarrays中获得500MB /秒。 我怀疑最后的数字可能是服务器级硬件上的两倍。

    设置readahead高于256,4096最适合我

     for i in 128 256 512 1024 2048 4096 8192 16384 32768 do hdparm --setra $i for j in 1 2 4 8 16 32 do time dd if=/dev/sda of=/dev/null bs="$j"k count=<fixthis> 1GB / blocksize done done 

    在不同的块大小和不同的预读中读取1GB的时间

    显示硬盘负载的标准工具是iostat

    它不会告诉你使用多less%的磁盘带宽,因为它不知道你的磁盘有多less带宽。 在任何情况下,您的磁盘都只有制造商引用的连续数据大量传输数据。

    我认为RRDtool应该做你想做的,它使用一个守护进程来转储系统数据,然后允许你处理它,但是你喜欢。 我经常用它来产生图表等来衡量系统负载。

    我会build议看看nmon工具。 它会显示您在多个系统参数上的实时负载以及将数据logging到文件中供以后阅读。 这是一个免费的工具在这里 :