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


101

是否有一个好的命令行实用程序来监视Linux上的硬盘负载?类似top但随后监视磁盘活动的信息,例如iso cpu的使用情况。

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

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


1
完美的问题,正是我在寻找=)
rafa.ferreira 2011年

可以像直接读取sysfs一样/sys/block/sda/stat。字段#1给出读取总数,字段#5是写入总数,字段#9是正在进行的I / O操作数。请参阅kernel.org/doc/Documentation/iostats.txt中的更多内容。这些值的长度是无符号的,可以包装。
萨斯坦宁

这是一个非常好的问题,因为我们一直在Plesk服务器上与这个问题作斗争。但是,缺少的是how do you do it with SNMP?。可以登录并检查内容,但确实需要历史数据。
Eugene van der Merwe 2014年

Answers:


83

您可以使用该iostat工具对此进行很好的评估。

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/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%时,发生器件饱和。


3
如果有的话,它驻留在Debian中的哪个软件包中?apt-cache dump没有为iostat提供任何帮助
hBy2Py 2015年

9
@Brian:它在sysstat软件包中(无论如何还是通过yum ...)

在RHEL 6.5上找不到此。这可用于RHEL吗?
哈佐2015年

可以继续工作而不必延迟吗?尝试运行单个实例以从中获取数据可能会获得相同的数量,因为它无法进行采样?
Wilf

@Hazok它是RHEL 6.5上sysstat RPM的一部分。
TheGeneral

81

iotop是top的一个版本,用于查看每个进程正在使用的IO。它在标准的ubuntu存储库中。我不知道它在RHEL还是Fedora中,但是应该。

在此处输入图片说明

对于老版本的内核(CentOS的说5.x或RHEL 5.x的)不支持iotop,利用Topio公司代替(这里记载:http://yong321.freeshell.org/freeware/pio.html#linux,它依靠/ proc // io用于io统计,并提供与iotop类似的功能。有关更多详细信息,请参见链接。


1
确实,Ubuntu默认没有安装它,因此可能会发出:sudo apt-get install iotop来获取它
Moshe

1
iotop需要的内核高于2.6.20,不幸的是,该内核排除了RedHat el4和el5。
戴夫·切尼

2
从RedHat 5.4开始,使iotop工作所需的位已被反向移植。请享用!
戴夫·切尼

它在Fedora中:)。
杰米

13

正如sastanin在评论中建议的那样,您可以直接处理/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.txthttps://www.kernel.org/doc/Documentation/block/stat.txt


7

您应该看看atop,它结合了iotop / top / iftop的强大功能,并将所有内容突出显示在系统上。


5

我建议您看一下nmon工具。它将向您显示许多系统参数的实时负载,以及将数据记录到文件中以供日后阅读。它是这里提供的免费工具:


5

找出总带宽是多少,您可以 hdparm -T /dev/sda用来测试缓冲区缓存(fileio)性能 hdparm -t /dev/sda以测试设备读取性能

示例:我的笔记本电脑从SATA磁盘获得82MB /秒的速度,从缓存获得2GB /秒的速度。我的dekstop从高速缓存中获得12GB /秒,从HW RAID阵列中获得500MB /秒。我怀疑那些最后的数字可能是服务器类硬件上的两倍。

将预读设置为大于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的时间


欢迎来到顺丰。您可以在帖子中使用高亮显示代码,方法是在字符串两边加上反引号或将段落缩进。
ℝaphink

有两件事-1)--setra现在是-a和2),根据hdparm -{T,t}命令,这些命令仅发出磁盘读取操作strace,因此是非破坏性的。(适用有关互联网上建议的标准免责声明)
i336_

4

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

它不会告诉您正在使用多少磁盘空间百分比,因为它不知道磁盘有多少带宽。在任何情况下,对于大批量连续数据传输,磁盘仅具有制造商报价的数字。


3

我认为RRDtool应该在这里执行您想要的操作它使用守护程序来转储系统数据,然后允许您随意处理它。我经常使用它来生成图形等以测量系统负载。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.