首页 文章

在Time Profiler,Instruments,OS X中缺少JAVA过程名称

提问于
浏览
9

我正在使用Java编写算法实现 . 在OS X 10.7之前,我使用Shark Profiler来分析我的实现,它的工作非常好 . 但是,新仪器不再找到程序名称 . 我已经尝试使用鲨鱼的VM参数运行java应用程序(即-agentlib:Shark),但它们对于10.7是未知的,我找不到这样的工具的agentlib .

有关如何将过程名称附加到Insturments中的符号名称(有些十六进制数字)的任何想法?我正在使用Eclipse Indigo,如果这有任何区别的话 .

谢谢!

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

编辑#2:来自(?)开发人员的更新通过apple的bug报告者:

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

编辑#3:好的,经过一些更多的讨论后发现开发人员本身并不知道该脚本的来源 . 显然,仪器中的时间分析器无论如何都不使用DTrace,因此唯一的选择是编写我们自己的DTrace脚本或仪器 .

你是对的,我道歉 . 我不确定那个脚本来自哪里,当我仔细查看它时,它没有jstack动作,所以它不是你想要的 . 看起来我能提供的唯一java分析选项是DTrace . DTrace有一个配置文件提供程序,以及一个收集java堆栈的jstack操作 . 您可以使用“聚合”来确定最重的堆栈跟踪,所有这些都可以从命令行进行 . DTrace的文档主要由Sun维护,我会引导您访问任何DTrace教程,因为大多数都涵盖了配置文件提供程序 . 尽管人们在网上说,仪器不会将DTrace用于所有内容,特别是时间分析,因此我无法在仪器UI中为您提供快速修复 .

3 回答

  • 0

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

    所以,不幸的是,在Apple修复他们的东西之前,你不会从这些工具中获取这些信息 . :(

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

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

  • 0

    我想到的一件事是 javac 编译器的 -g 选项包含调试信息 . 在eclise中(至少在helios中),您可以在'Java Compiler','Classfile Generation'下为调试数据设置不同的选项 . 也许其中一些设置被破坏了 .

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

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

  • 5

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

相关问题