磁盘字节数/秒的读写

我试图找出如何计数每秒读写字节数。 目前我所做的是从/ proc / diskstats读取数据,如下所示:

202 0 xvda 80702313 1132334 2823807338 426518304 89838477 177437957 2140229136 1696949080 0 142957364 2123455348

我读了第6个(扇区读取)和第10个(扇区/写入)字段,并将它们乘以512(通过检查fdisk的输出,即sectors of 1 * 512 = 512 bytes我认为这是正确的值)应该给我的字节数。 我取两个样本,并从第一个样本中减去第一个样本,然后将结果值除以样本之间的秒数。 它似乎并没有给出正确的结果。 任何想法如何实际上应该这样做? 我正在寻找类似于sar -b输出的内容

谢谢

因为你不能比较他们。 sar -b是在特定的时间,间隔10分钟或任何你在cron工作中指定的。

但/ proc / diskstats是内核运行时的值。 它不是在任何特定的时间间隔计算,而是更多的计数器,核心保持核算。 它是从哪里iostat读取数据。 如果指定了iostat -xdk 5 5,则间隔5秒,iostat将读取/ proc / diskstats文件并从中获取数据的加权平均值。 需要注意的重要一点是/ proc / diskstats不是时间相关的,因此您不能将其与sar -b进行比较,sar -b以固定的特定时间间隔运行。

如果你想要更详细的描述,我可以检查代码并告诉,但现在这里真的很晚。

间隔使用iostat

 iostat -d /dev/xvda <interval(sec)> <counter> 

以10秒的间隔进行静止

 iostat -d /dev/xvda 10 

如果你想获得容易的输出绘图

 iostat -d /dev/xvda 10 | grep xvda 

那么它会给你像下面的东西

 xvda 1.30 3.28 38.68 1151011 13583372 xvda 15.00 0.00 100.00 0 100 xvda 0.00 0.00 0.00 0 0 xvda 0.00 0.00 0.00 0 0 xvda 5.00 0.00 32.00 0 32 xvda 0.00 0.00 0.00 0 0 xvda 0.00 0.00 0.00 0 0 xvda 8.00 0.00 240.00 0 240 xvda 0.00 0.00 0.00 0 0 

您应该始终放弃第一行,因为这是自从机器启动以来或计数器最后一次环绕的总数。

我不确定用石墨绘图是多么困难,您可以将它们复制并粘贴到Excel或LibraOffice Calc中并创build图表。