dtrace
尽管诸如strace(1)
和`truss(1)之类的调试实用程序可以跟踪进程产生的系统调用,但是它们可能很慢,因此不适合解决繁忙的 UNIX 系统上的性能问题。另一个名为DTrace的工具可让你在系统范围内查看幕后发生的情况,而无需修改或重新编译任何内容。它还使你可以在生产环境上工作,并动态监视正在运行的程序或服务器进程,同时又不会造成很大的开销。
Tip: 尽管有
dtrace(1)
有 Linux 版本,但dtrace(1)
工具在 macOS 和其他 FreeBSD 变体上效果最佳。
本小节将使用 macOS 自带的dtruss(1)
命令行实用程序,它只是一个dtrace(1)
脚本,该脚本显示了进程的系统调用,使我们不必编写dtrace(1)
代码。请注意,dtrace(1)和
dtruss(1)`都需要 root 权限才能运行。
dtruss(1)
的工作方式与strace(1)
实用程序相同。与strace(1)
类似,当与-c
参数一起使用时,dtruss(1)
将打印系统调用计数:
上面的输出将迅速告知你 Go 代码中的潜在瓶颈,甚至可以帮你比较两个不同的命令行程序的性能。
Tip: 诸如
strace(1)
,dtrace(1)和 dtruss(1)`之类的实用工具需要一段时间适应熟悉,但是这样的工具可以使我们的生活变得更加轻松和舒适,我强烈建议你立即开始学习至少一个这样的工具。
你可以阅读 Brendan Gregg 和 Jim Mauro 写的DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X和FreeBSD ,或访问http://dtrace.org/,以了解有关`dtrace(1)`实用程序的更多信息。
虽然,dtrace(1)
比strace(1)
功能强大得多,因为它具有自己的编程语言。但是,当你要做的只是监视可执行文件的系统调用时,strace(1)
的用途更加广泛。
Last updated