我试图测量一个特定的进程在指定的时间内对特定卷执行的磁盘写入和读取的总量。
我发现了iotop,它可以每秒钟输出一个特定的进程,像这样:
iotop --batch --pid $(pidof my_process)
你可以在哪里用-nx指定x次迭代。
但是,我必须过滤出实际的数字,并且自己计算出来。
有没有更简单的方法来做到这一点?
不知道更简单的方法,但这个bash片段可能会帮助你parsing你需要从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只是总,所以真的,只要抓住一次,等待不久,再次抓住它,find差异,有你的回答 。 您可能需要查看源代码并找出其数据types,以查看它是否最终包装。 虽然可能不是一个小平板的问题。
它可能会被杀死,而且你可能需要定制一个插件,但是你可以尝试一下“ Munin ”,它是一个graphics应用程序,可以完成你所需要的function。
它没有针对每个进程IO的插件,但是我确信黑客不会太难。 然后,您将获得所有增加的munin / rrdtool的价值,每天/每周/每年的暴涨,绘图,限制,警告等。
您可以在大多数基于Debian的发行版(包括Maemo)中使用apt-get安装sysstat ,然后运行iostat来监视磁盘读写总数。
只要确保没有别的东西正在写入磁盘,这可能或不可能在你的情况。
iostat打印总计从启动或其他任意时间点读取和写入块。 你必须弄清楚有多大块才能知道写了多less数据。
我通过让dd写入已知数量的数据并分割块来实现这一点。