Linux 中的什么程序可以随时间测量 I/O?

Nei*_*eil 7 linux io measurement

我正在尝试测量特定进程在指定持续时间内对特定卷执行的磁盘写入和读取总量。

我找到了 iotop,它可以每秒为特定进程输出 IO,如下所示:

iotop --batch --pid $(pidof my_process)
Run Code Online (Sandbox Code Playgroud)

您可以在其中指定 x 迭代-n x

但后来我必须过滤掉实际数字,并自己计算出来。

有没有更简单的方法来做到这一点?

Kyl*_*ndt 9

不知道有更简单的方法,但是这个 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
Run Code Online (Sandbox Code Playgroud)

实际上,每 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
Run Code Online (Sandbox Code Playgroud)

实际上,看起来上面的脚本是错误的,因为它似乎/proc/<pid>/io只是总数,所以真的,抓一次,等多久,再抓一次,找到差异,就有你的答案。您可能希望查看源代码并找出其数据类型,以查看它是否最终会回绕。不过对于小平板电脑来说可能不是问题。