我正在尝试弄清楚如何计算每秒读取和写入的字节数。目前我正在做的是从 /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 中并创建图表。