我正在尝试测量特定进程在指定持续时间内对特定卷进行的磁盘写入和读取总量。
我发现了 iotop,它可以每秒为特定进程输出 IO,如下所示:
iotop --batch --pid $(pidof my_process)
其中您可以使用 指定 x 次迭代-n x
。
但随后我必须过滤掉实际数字,然后自己计算出来。
有没有更简单的方法可以做到这一点?
答案1
不知道有没有更简单的方法,但是这个 bash 代码片段可能有助于您从 iotop 中解析出您需要的内容:
iotop --batch --pid 1 > log
line_num=0
while read line; do
line_num=$(($line_n+1))
if [[ $(($line_num % 3)) -eq 0 ]]; then
#print Column 3
echo $line | awk '{print $3}'
fi
done < log > processed_file
#Get total of column three:
cat processed_file | (tr '\n' +; echo 0) | bc
实际上,每 x 秒读取一次 /proc/$PID/io 可能会更容易:
val=0
total=0
counter=0
pid=2323
while [[ $counter < 100 ]]; do
counter=$(($counter +1 ))
#Change the sed number for different line, 5 is read_bytes
val=$(cat /proc/$pid/io | sed -n '5p' | awk '{ print $2 }')
total=$(($total + $val))
echo $total
sleep 1
done
事实上,上面的脚本看起来是错误的,因为它看起来/proc/<pid>/io
只是总数,所以实际上,只需抓取一次,等待多长时间,再次抓取,找到差异,这就是你的答案。您可能需要查看源代码并找出其数据类型,看看它是否最终会回绕。不过对于小型平板电脑来说可能不是问题。
答案2
这可能有点过度,你可能需要自定义一个插件,但你可以尝试“穆宁“,这是一个可以满足您需求的图形应用程序。
它没有针对每个进程 IO 的插件,但我确信破解一个插件并不太难。然后您将获得 munin/rrdtool 的所有附加值,包括日/周/年的平均值、图表、限制、警告等。
答案3
您可以sysstat
在大多数基于 Debian 的发行版(包括 Maemo)中使用 apt-get 安装,并运行iostat
以监控磁盘读/写总数。
只要确保没有其他内容写入磁盘即可,这在您的情况下可能有或不可能。
iostat
打印自启动以来或其他任意时间点读取和写入的块总数。您必须确定块有多大才能知道写入了多少数据。
我通过dd
写入已知量的数据并划分块来实现此目的。