我正在尝试优化项目,并希望通过查看I / O来分析项目的效率。 该项目仅影响本地目录中的文件和目录,这使事情变得更简单。假设I / O操作的数量越少(暂时让我们这样做),越好,有没有办法监视或简单地从进程A开始到进程A结束时获取所有文件系统操作的计数?有没有工具可以让你这样做?我在MacOS上,但希望能在* nix或MacOS上使用。
如何做到这一点?如何根据本地文件系统I / O分析应用程序的性能?
这恰好是node.js应用程序(不是服务器)
答案 0 :(得分:3)
是的,该工具存在。它是strace
。
在OSX上,等效工具似乎是dtruss
。
strace
和dtruss
中的每一个都支持-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。