【问题标题】:Missing JAVA Procedure names in Time Profiler, Instruments, OS XTime Profiler、Instruments、OS X 中缺少 JAVA 过程名称
【发布时间】:2012-01-16 19:19:33
【问题描述】:

我正在使用 Java 编写算法实现。在 OS X 10.7 之前,我使用 Shark Profiler 来分析我的实现,效果很好。但是,新的 Instruments 不再找到过程名称。我已经尝试使用 Shark 的 VM 参数(即 -agentlib:Shark )运行 java 应用程序,但它们在 10.7 中是未知的,而且我找不到这样的仪器代理库。

知道如何将程序名称附加到仪器中的符号名称(一些十六进制数字)吗?我正在使用 Eclipse Indigo,如果这有什么不同的话。

谢谢!

编辑:到目前为止,OS X Mountain Lion 没有任何改变。

编辑#2:(?)开发人员通过苹果的错误报告者的更新:

dtrace 过去曾支持 Java 堆栈,但老实说,我不能说是否一直保持支持。对于您要测量的内容,这可能是一种可行的解决方法——否则,这不是性能工具目前的优先事项。您可能希望从 /usr/bin/cpu_profiler.d 中的 D 脚本开始,并修改它以收集 jstack。

编辑#3:好的,经过更多讨论后发现开发人员本人并不知道该脚本的来源。显然,Instruments 中的时间分析器无论如何都不使用 DTrace,所以剩下的唯一选择就是编写我们自己的 DTrace 脚本或工具。

你是对的,我很抱歉。我不确定那个脚本是从哪里来的,当我仔细查看它时,它没有 jstack 动作,所以它不是你想要的。看起来我可以为您提供的唯一 java 分析选项是 DTrace。 DTrace 有一个配置文件提供程序和一个收集 java 堆栈的 jstack 操作。您可以使用“聚合”来确定最重的堆栈跟踪,所有这些都可以在命令行中进行。 DTrace 的文档主要由 Sun 维护,我会指导您查看任何 DTrace 教程,因为大部分都涵盖了配置文件提供程序。

尽管网上有人说,Instruments 并没有对所有事情都使用 DTrace,特别是时间分析,所以我无法在 Instruments UI 中为您提供快速修复。

【问题讨论】:

    标签: java macos profiling instruments dtrace


    【解决方案1】:

    Instruments 依赖于 Sun 开发的一款名为 dtrace 的可爱软件。 dtrace 有一个名为 'jstack()' 的函数,它应该打印带有 java 符号的堆栈跟踪,还有一个 'ustack()' 应该为其他语言(python、node.js 等)做类似的事情。 )。不幸的是,OS X 的 dtrace 版本不支持这些方法,因此 Instruments 不会提供该功能。

    因此,不幸的是,在 Apple 修复他们的东西之前,您无法从这些工具中获取这些信息。 :(

    关注此主题以获取更多信息:http://www.mail-archive.com/dtrace-discuss@opensolaris.org/msg04863.html

    我已经向苹果提交了一个关于他们缺乏对帮助堆栈跟踪器的支持的错误,如果你想要这个功能,你也应该提交一个错误:https://bugreport.apple.com

    【讨论】:

    • 太好了,谢谢。我希望这个问题能很快得到修复,尽管这个错误已经存在了很长一段时间了。我会提交错误报告。
    • 所以,我从一位开发人员那里得到了更新,内容如下:“dtrace 过去曾支持 Java 堆栈,但老实说,我不能说是否保持了支持。对于您要测量的内容,这可能是一个可行的解决方法——否则,这不是性能工具的优先事项。您可能希望从 /usr/bin/cpu_profiler.d 中的 D 脚本开始并修改它也可以收集 jstack。”
    • 检查后,似乎建议的文件甚至不存在。至少在我的系统上。
    • 但是,您可以在 XCode Instruments 中构建自己的仪器(通过 cmd+b)。在以下选项窗口中,您可以专门选择它应该处理的堆栈跟踪。但是,由于我是一个编写 dtrace 脚本的完整初学者(实际上,我一无所知),所以我不知道如何构建自己的 java cpu 分析器。如果我能打开随附的 cpu 分析器并进行比较...
    【解决方案2】:

    如果您想分析 Java 应用程序,我建议您使用 Oracle 的 Visualvm(通过 Java.net)。该工具可以将内存和 cpu 分析到该方法,即使对于远程 JVM 也是如此。在 OSX 上,它显然不是默认 JDK 的一部分,但你可以在这里获得它:http://visualvm.java.net/download.html 可能是鲨鱼的替代品。

    【讨论】:

    • 我试过visualvm,但我对它非常不满意。与鲨鱼或乐器相比,它笨重,开销可笑,而且很难启动,即使使用 eclipse 插件也是如此。对我来说,这不是一个选择。
    【解决方案3】:

    我想到的一件事是javac 编译器的-g 选项以包含调试信息。在 eclise 中(至少在 helios 中),您可以在“Java 编译器”、“类文件生成”下设置不同的调试数据选项。也许其中一些设置被破坏了。

    然而,这并不能解决 方法 名称的问题,这些名称总是包含在类文件中。然而,不同风格的 Java VM 以不同的方式执行运行时优化,例如,请参阅文档中关于 stack traces 可靠性的注释。

    因此,切换到另一个(版本)VM 可能会影响分析器执行正确操作的能力。 - 顺便说一句,您没有在此过程中隐式“升级”您的 Java 版本(例如 1.6 到 1.7)?

    【讨论】:

    • 我确实升级到了非苹果的 java 版本。虽然据我所知,这个“bug”一直存在,而且缺少的“worksforme”帖子表明它可能与 vm 无关。我认为如果找到一个 dtace 钩子,那就更成问题了。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2012-06-28
    • 1970-01-01
    • 2012-08-20
    • 2011-07-27
    • 2011-02-16
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多