我正在尝试对我在时间,内存和磁盘使用方面开发的工具进行基准测试。我知道/usr/bin/time
基本上给了我前两个我想要的东西,但是对于磁盘使用我得出结论我必须滚动我自己的bash脚本,定期提取写入的&#39;字节&#39;来自/proc/<my_pid>/io
的内容。根据这个script,我在这里提出了:
"$@" &
pid=$!
status=$(ps -o rss -o vsz -o pid | grep $pid)
maxdisk=0
while [ "${#status}" -gt "0" ];
do
sleep 0.05
delta=false
disk=$(cat /proc/$pid/io | grep -P '^write_bytes:' | awk '{print $2}')
disk=$(disk/1024)
if [ "0$disk" -gt "0$maxdisk" ] 2>/dev/null; then
maxdisk=$disk
delta=true
fi
if $delta; then
echo disk: $disk
fi
status=$(ps -o rss -o vsz -o pid | grep $pid)
done
wait $pid
ret=$?
echo "maximal disk used: $maxdisk KB"
不幸的是,我遇到了两个问题:
如何解决这些问题?
答案 0 :(得分:1)
您可能希望查看filetop
中的BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more:
tools / filetop:文件通过文件名和进程读写。文件顶部。
此脚本的工作原理是使用内核动态跟踪来跟踪
vfs_read()
和vfs_write()
函数,这些函数用于显式读写调用。如果使用其他方式(例如,通过mmap()
)读取或写入文件,则使用此工具将无法看到它们。
Brendan Gregg就Linux Performance Tools, 提供了很好的演讲和演示,他们非常有启发性。
答案 1 :(得分:0)
我最终发现了类似的问题:How do I measure net used disk space change due to activity by a given process in Linux?。
基于那里的答案,由于难以跟踪可能由给定过程发起的所有不同类型的变化,因此接缝成为棘手的问题。
在那里也提到了Dtrace,但据我所知,它是Sun专有的(或者我现在认为是Oracle?)因此默认只在Solaris上提供。最终我找到了这个Github repo,旨在缩小Linux用户的差距。
答案 2 :(得分:0)
您可以通过在记录中使用多个时间戳,以不同的方式考虑它,而不用担心已删除的文件,为您提供: