首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3. SystemTap and 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 -rCONFIG_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:

代码语言:javascript
复制
# ./configure --with-dynamic-trace=systemtap + whatever args you need
# make

3.4测试

与DTrace不同,SystemTap需要知道它所跟踪的二进制文件,并且在开始跟踪之前必须能够读取该二进制文件。您的探针脚本必须引用正确的光束模拟器,并且需要找到该二进制文件。这些示例是为“beam”编写的,但其他版本(如“beam.smp”或“beam.debug.smp”)可能存在(取决于您的配置)。确保您要么指定探测器中二进制文件的完整路径,要么指定“beam”二进制文件位于搜索路径中。

所有可用的探测都可以如下所示:

代码语言:javascript
复制
# stap -L 'process("beam").mark("*")'

或:

代码语言:javascript
复制
# PATH=/path/to/beam:$PATH stap -L 'process("beam").mark("*")'

因此,NIF库如下所示:

代码语言:javascript
复制
# PATH=/path/to/dtrace/priv/lib:$PATH stap -L 'process("dtrace.so").mark("*")'

3.5 运行SystemTap脚本

调整过程(“梁”)引用到您的梁版本并将脚本附加到正在运行的“梁”实例:

代码语言:javascript
复制
# stap /path/to/probe/script/port1.systemtap -x <pid of beam>

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com