【问题标题】:Get a count on all filesystem operations in a directory over a period of time获取一段时间内目录中所有文件系统操作的计数
【发布时间】:2017-04-10 21:48:27
【问题描述】:

我正在尝试优化一个项目,并想通过查看 I/O 来分析该项目的效率。 该项目只影响本地目录中的文件和目录,这使事情变得更简单。假设 I/O 操作的数量越少(让我们暂时使用这个)越好,有没有办法监视或简单地获取从进程 A 开始到进程 A 结束时的所有文件系统操作的计数?有没有工具可以让你做到这一点?我在 MacOS 上,但希望能在 *nix 或 MacOS 上工作。

如何正确地做到这一点?如何根据本地文件系统 I/O 分析应用程序的性能?

这恰好是一个 node.js 应用程序(虽然不是服务器)

【问题讨论】:

    标签: linux macos unix io monitoring


    【解决方案1】:

    是的,该工具存在。是strace

    在 OSX 上,等效工具似乎是 dtruss

    stracedtruss 都支持-c 开关。在strace 上,此开关报告“每个系统调用的时间、调用和错误,并报告程序退出的摘要”。在dtruss 上,它“打印系统调用计数”。

    -c 开关可能会满足您的所有要求,但还是要研究手册页;它们也可能会启发您查看其他数据。

    例子:

    strace -o /tmp/strace.out -e trace=file,open,close,read,write /bin/echo hello
    grep -c '^write' /tmp/strace.out
    
    $ strace -c -e trace=file,open,close,read,write /bin/echo hello
    hello
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
     36.47    0.000031          10         3           open
     21.18    0.000018           6         3         3 access
     17.65    0.000015          15         1           write
     11.76    0.000010           2         5           close
      7.06    0.000006           6         1           execve
      5.88    0.000005           5         1           read
    ------ ----------- ----------- --------- --------- ----------------
    100.00    0.000085                    14         3 total
    

    【讨论】:

    【解决方案2】:

    inotify / inotifywatch 也可以用于此目的。

    这是一个内核级挂钩,可用于启动文件系统监控。它特定于linux。

    参考:https://linux.die.net/man/7/inotify

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 2019-01-27
      • 2012-10-22
      相关资源
      最近更新 更多