- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想,不仅要跟踪 java 进程,还要使用 systemtap 中对 openjdk 跟踪的新支持,包括热点跟踪和方法跟踪。
因此我installed ddebs.ubuntu.com 存储库以安装内核调试符号 - 然后我可以调用一个使用内核 tapset 但还不是 java 的 stap 脚本。我确实注意到一个名为 openjdk-7-jdk-dbgsym 的包并尝试安装它以查看它是否具有 openjdk 的 systemtap tapsets,但这与 openjdk-7-dbg 包冲突(然后 ubuntu 不允许我错误报告,因为 openjdk-7-jdk-dbgsym 包不是来自“官方”服务器。如果我卸载那个并安装另一个,它无论如何也无济于事。
有人在 ubuntu 上成功做到了吗?
编辑:为了在 ubuntu 上使用 java byteman 支持从源代码成功构建 systemtap,你必须通过
--with-java=/usr/lib/jvm/default-java
(或者你奇怪的 jvm 位置)
否则构建将无法完成所需的 jar 。然后你必须按照源目录 java/README 文件中的步骤进行 make install(不要忘记修改路径)。
还有另一个 --with-dyninst 选项,我没有尝试过,但可能会为其他调用模式“修复”它
edit2:好吧,它编译甚至运行,但即使在给定的示例和设置了 BYTEMAN_HOME 的情况下,它也不会输出任何内容...
最佳答案
有几种不同的策略可以从 systemtap 跟踪 openjdk。
第一个依赖于编译到 JVM 中的 sys/sdt.h dtrace 样式标记,而不是 dbgsym 数据:
% 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 通过
% stap -I PATH ...
第二种方法依赖于编译到 JVM 中的 dwarf debuginfo,dbgsym* 东西应该很方便。如果安装正确,
% stap -L 'process("/usr/lib/jvm/java*/jre/lib/*/server/libjvm.so").function("*")'
应该显示一个 gajillion 函数。您可能没有 tapsets 的好处,但通过巧妙地选择功能,您应该能够进行一些不错的跟踪。
第三种方法依赖 byteman 在 systemtap 控制下进行 JVM 内部自检测。这不需要 java dbgsym,但确实需要 byteman 和一堆辅助工具。如果它可用并编译到 ubuntu systemtap 中,则类似于:
% stap -e 'probe java("org.my.MyApp").class("^java.lang.Object").method("foo(int)")
{ println($$parms) }'
可能对你有用。
关于ubuntu - 用于 ubuntu 上的 java 的 Systemtap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22132813/
好吧,我正尝试在 SDT 标记上探索我自己的应用程序。我写了一个 systemtap 脚本来探测它,但是 systemtap 在第 5 次之前没有显示任何错误,然后在第 5 次(开始运行)之后,它就什
我想访问从 glibc 的“打开”函数返回的数据,例如文件名或文件描述符 我试试 probe process("/lib*/libc.so.*").function("open") { fd =
我想访问从 glibc 的“打开”函数返回的数据,例如文件名或文件描述符 我试试 probe process("/lib*/libc.so.*").function("open") { fd =
以下 systemtap 脚本无法编译: probe process("myexe").function("myFun").return { print("hi mom\n") } 它说: seman
我正在尝试在我的 GT-i9300 上加载一个简单的 Systemtap 模块 我得到了错误 Error inserting module '/sdcard/systemtap/modules/mon
我想知道如何在 systemtap 中添加对用户空间应用程序的支持。当我尝试跟踪任何用户空间程序时,它显示 CONFIG_UTRACE 未设置。 最佳答案 也许您的内核中没有设置 utrace 工具。
我正在尝试执行一个 systemtap 脚本。但是在执行过程中我遇到了以下语义错误。 stap -v -g netfilter.stp Pass 1: parsed user script and 9
我正在尝试找出这些写入我的闪存驱动器的原因。 deathstar> while true > do > dmesg|grep sdc|grep WRITE > sleep 3 > done [1796
我正在考虑使用 SystemTap 来监控生产服务器上的文件系统事件。 如何将数据从 SystemTap 生成的内核模块传输到另一个应用程序?我只看到 printf 作为从 SystemTap 脚本输
我有一个简单的 ST 脚本,它计算每个文件的进程 io 大小: global fds, counts probe syscall.open.return { if ( ( pid()
我想使用 systemtap 来提取我的 linux 生产服务器的详细信息。我的 systemtap 脚本是 global bt; global quit = 0 probe begin {
我想编写一个 SystemTap 脚本,它可以确定探测调用中当前 PID 的实际线程数。此时该数字应与/proc/4711/status 输出中显示的数字相同。 我的第一个方法是计算 kprocess
我正在尝试使用 systemtap 调试内核中的一些代码。我需要在该函数中打印局部变量的值,但看起来 systemtap 只能看到函数参数,而看不到该函数中定义的局部变量。这是我的探测脚本。 prob
我正在尝试创建硬链接(hard link),直接从 Systemtap 嵌入式 C 代码调用 sys_link。基本上,代码如下所示: function sys_link:long(oldname,
我正在寻找一些关于 systemtap 对性能影响的真实信息。我知道静态内核探测记录在他们网站的某处(带有统计信息),但是用户空间探测呢? 我在他们的邮件列表 (http://sourceware.o
我的系统是 Ubuntu,uname -r = 4.15.0-23-generic。我已经为内核安装了调试符号。 我的问题是: I am trying to use socket(AF_PACKET,
我想使用 systemtap 从远程访问中提取我的 linux 生产服务器的详细信息。对此,我有一些疑问: linux生产服务器和linux开发服务器是否有必要使用相同的内核。如果没有,那么如何添加对
我正在尝试运行此脚本,但它显示没有 tcp 连接有什么想法吗?操作系统:centos 6.3 #! /usr/bin/env stap probe begin { printf("%6s %16s
我想用 SystemTap 分析内核模块的缓存行为(#cache 引用、#cache 未命中等)。有一个在线示例脚本,展示了如何使用 SystemTap 读取性能事件和计数器,包括与缓存相关的事件和计
我的目标是分析内核模块中每个函数的执行时间。使用我在网上看到的示例脚本,我想出了以下脚本来满足我的需要。但偶尔我会得到计算延迟的负值。虽然,它们很少发生,但我想这表明我的脚本有问题。谁能帮我解决这个问
我是一名优秀的程序员,十分优秀!