【问题标题】:Measuring peak disk use of a process测量进程的峰值磁盘使用
【发布时间】:2017-01-08 12:13:56
【问题描述】:

我正在尝试在时间、内存和磁盘使用方面对我正在开发的工具进行基准测试。我知道/usr/bin/time 基本上给了我前两个想要的东西,但是对于磁盘使用,我得出的结论是我必须推出自己的 bash 脚本,该脚本会定期从/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 或过低此文件的底部。
  • 第二个问题是我不知道如何处理将临时文件作为其进程的一部分删除的进程。在这种情况下,我认为公平的基准是记录最大 net 磁盘使用量(即写入的字节数峰值 - 擦除的字节数),但我不知道这种差异的第二部分在哪里可以找到。

我该如何解决这些问题?

【问题讨论】:

    标签: linux bash io diskspace data-profiling


    【解决方案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, 进行了很好的演讲和演示,它们很有启发性。

    【讨论】:

      【解决方案2】:

      我最终发现了这个类似的问题: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 用户的差距。

      【解决方案3】:

      通过在记录中使用多个时间戳,您可以有不同的想法,完全不用担心已删除的文件,从而为您提供:

      • 磁盘随时间写入增量。例如 8 GB/天。如果全部都到/tmp 也没关系。每次运行时,都会使用计数器将新平均值保存到磁盘中,以保持滚动平均值。因此,如果您错误的进程每小时执行 2 GB,然后是 1 GB,然后是 0 GB,那么每小时就是 1 GB/小时(对于该时间段)
      • 对于每个快照,您选择最高的,记录下来,在这种情况下,2 GB 用于操作的第一个小时。如果您每小时运行该脚本并且它始终为 0 GB,则它将在第一个小时内报告 2 GB。然后,如果它启动并降低 5 GB,则“峰值”将显示在凌晨 3 点,平均为 333 MB/小时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 2020-10-07
        • 2010-10-20
        • 2017-02-04
        相关资源
        最近更新 更多