在一段时间内计算目录中的所有文件系统操作

时间:2016-11-26 20:31:19

标签: linux macos unix io monitoring

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

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

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

2 个答案:

答案 0 :(得分:3)

是的,该工具存在。它是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

答案 1 :(得分:1)

inotify / inotifywatch也可用于此目的。

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

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