首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ubuntu上使用Systemtap

在ubuntu上使用Systemtap
EN

Stack Overflow用户
提问于 2014-03-02 20:14:31
回答 2查看 1.7K关注 0票数 2

我希望,不仅跟踪java进程,而且在系统the中使用对openjdk跟踪的新支持,包括热点跟踪和方法跟踪。

因此,我使用已安装 ddebs.ubuntu.com存储库来安装内核调试符号--然后我可以调用一个stap脚本,它使用内核tapset,但还没有使用java脚本。我确实注意到了一个名为openjdk-7-jdk-dbgsym的包,并试图安装它,看看它是否有openjdk的系统点击设置,但是这与openjdk-7-dbg包有冲突(然后ubuntu不允许我编写bug报告,因为openjdk-7-jdk-dbgsym包不是来自‘官方’服务器。如果我卸载一个,安装另一个,无论如何都没有帮助。

有没有人在ubuntu上成功地做到了这一点?

编辑:为了在ubuntu上成功地通过java byteman支持从源代码构建系统,您必须传递

代码语言:javascript
复制
--with-java=/usr/lib/jvm/default-java

(或者您奇怪的jvm位置)

否则,建筑就不会做罐子等所需的工作。然后,您必须使安装遵循源dir /自述文件中的步骤(并且不要忘记修改路径)。

还有另一个选项,我还没有尝试过,但可能会为其他调用模式“修复”它。

edit2:嗯,它编译甚至运行,但它从来没有输出任何东西,即使在给出的例子和BYTEMAN_HOME集.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-02 20:56:32

系统挖掘中有几种不同的跟踪openjdk的策略。

第一个依赖于编译到JVM中的sys/sdt.hDTrace样式标记,而不是dbgsym数据:

代码语言:javascript
复制
% stap -L 'process("/usr/lib/jvm/java*/jre/lib/*/server/libjvm.so").mark("*")'

如果这显示了一个空的结果(如果我有ubuntu libjvm.so路径右),那么这表明您的openjdk是在没有sys/sdt.h内容的情况下编译的,所以这个选项是关闭的。如果它显示了一个可爱的列表,您可以直接使用这些.mark探针,也可以从任何地方使用hotspot*.stp tapset源的副本,并将其转录到您的.stp文件中,或者让stap通过

代码语言:javascript
复制
% stap -I PATH ...

第二种方法依赖于编译到JVM中的矮小调试器,对于JVM,dbgsym*都应该很方便。如果安装得当,

代码语言:javascript
复制
% stap -L 'process("/usr/lib/jvm/java*/jre/lib/*/server/libjvm.so").function("*")'

应该显示出一个庞大的功能。您可能没有tapsets的好处,但是有了巧妙的函数选择,您应该能够进行一些体面的跟踪。

第三种方法依赖于byteman来进行系统抽头控制下的内部JVM自我检测。这不需要java dbgsym,但需要使用byteman和一些辅助工具。如果这是可用的,并被编译到ubuntu系统中,那么如下所示:

代码语言:javascript
复制
% stap -e 'probe java("org.my.MyApp").class("^java.lang.Object").method("foo(int)")
           { println($$parms) }'

可能对你有用。

票数 4
EN

Stack Overflow用户

发布于 2014-03-07 22:58:57

最后,我直接为java使用了byteman,对内核使用了systemtap。笨重但很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22132813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档