我正在尝试测量特定进程在指定持续时间内对特定卷执行的磁盘写入和读取总量.
我找到了iotop,它可以每秒为特定进程输出IO,如下所示:
iotop --batch --pid $(pidof my_process)
您可以在其中使用-n x指定x次迭代.
但是我必须过滤掉实际的数字,然后自己计算.
有更简单的方法吗?
解决方法
不知道一个更简单的方法,但这个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只是总数,所以真的,只需抓住一次,等待多久,再次抓住它,找到差异并且有你的答案.您可能希望查看源代码并找出其数据类型,以查看它是否最终包含在内.虽然可能不是一个小平板电脑的问题.