磁盘字节数/秒读取和写入

磁盘字节数/秒读取和写入

我正在尝试弄清楚如何计算每秒读取和写入的字节数。目前我正在做的是从 /proc/diskstats 读取数据,如下所示:

202 0 xvda 80702313 11323342823807338426518304 89838477 17743795721402291361696949080 0 142957364 2123455348

我读取了第 6 个(每秒读取的扇区数)和第 10 个(每秒写入的扇区数)字段,并将它们乘以 512(我通过检查 fdisk 的输出发现这是正确的值,即sectors of 1 * 512 = 512 bytes),这应该会给出字节数。我取 2 个样本,用后一个样本减去第一个样本,然后将得到的值除以样本之间的秒数。但这似乎没有给出正确的结果。有人知道这应该怎么做吗?我正在寻找类似于输出的sar -b内容

谢谢

答案1

因为您无法比较它们两者。sar -b 是在特定时间、以 10 分钟的间隔或您在 cron 作业中指定的任何时间执行的。

但是 /proc/diskstats 是内核运行时值。它不是按任何特定时间间隔计算的,而更像是内核用于记账的计数器。iostat 从中读取数据。如果您指定 iostat -xdk 5 5,则 iostat 将以 5 秒为间隔读取 /proc/diskstats 文件并从中获取数据的加权平均值。需要注意的重要一点是 /proc/diskstats 不依赖于时间,因此您无法将其与以固定、特定时间间隔运行的 sar -b 进行比较。

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

答案2

使用 iostat 间隔

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

每隔 10 秒执行 iostat

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 中并创建图表。

相关内容