3. SystemTap and Erlang/OTP
3 SystemTap和Erlang / OTP
3.1引言
SystemTap是针对Linux的DTrace。事实上,Erlang的SystemTap支持是使用SystemTap的DTrace兼容性层构建的。有关Erlang DTrace支持读取的介绍$ERL_TOP/HOWTO/DTRACE.md
。
3.2 必要条件
- 使用UTRACE的Linux内核支持检查当前内核中的UTRACE支持:grep CONFIG_UTRACE / boot / config-
uname -r
CONFIG_UTRACE = yFedora 16已知包含UTRACE,因为大多数其他Linux发行版都需要定制构建内核。查看Fedora的SystemTap文档以获取更多所需的软件包(例如内核调试符号)
- SystemTap>1.6
在写这篇文章的时候,最新发布的SystemTap版本是1.6版本。Erlang的DTrace支持需要在该版本之后引入的MACRO。因此,无论是获得更新的版本还是自己构建SystemTap(请参阅:http : //sourceware.org/systemtap/getinvolved.html)
3.3 建设Erlang
使用SystemTap支持配置和构建Erlang:
# ./configure --with-dynamic-trace=systemtap + whatever args you need
# make
3.4测试
与DTrace不同,SystemTap需要知道它所跟踪的二进制文件,并且在开始跟踪之前必须能够读取该二进制文件。您的探针脚本必须引用正确的光束模拟器,并且需要找到该二进制文件。这些示例是为“beam”编写的,但其他版本(如“beam.smp”或“beam.debug.smp”)可能存在(取决于您的配置)。确保您要么指定探测器中二进制文件的完整路径,要么指定“beam”二进制文件位于搜索路径中。
所有可用的探测都可以如下所示:
# stap -L 'process("beam").mark("*")'
或:
# PATH=/path/to/beam:$PATH stap -L 'process("beam").mark("*")'
因此,NIF库如下所示:
# PATH=/path/to/dtrace/priv/lib:$PATH stap -L 'process("dtrace.so").mark("*")'
3.5 运行SystemTap脚本
调整过程(“梁”)引用到您的梁版本并将脚本附加到正在运行的“梁”实例:
# stap /path/to/probe/script/port1.systemtap -x <pid of beam>