我正在使用Java编写算法实现。在OS X 10.7之前,我使用Shark Profiler来描述我的实现,它的工作非常好。但是,新仪器不再找到程序名称。我已经尝试使用鲨鱼的VM参数运行java应用程序(即-agentlib:Shark),但它们对于10.7是未知的,我找不到这样的工具的agentlib。
关于如何将过程名称附加到Insturments中的符号名称(有些十六进制数字)的任何想法?我正在使用Eclipse Indigo,如果这有任何区别的话。
谢谢!
编辑:到目前为止,OS X Mountain Lion没有任何改变。
编辑#2:来自(?)开发人员的更新,通过苹果公司的bug记者:
dtrace过去一直支持Java堆栈,但我真的不能说是否支持了这种支持。对于您要测量的内容,这可能是一种可行的解决方法 - 此时,这不是性能工具的优先级。您可能希望从/usr/bin/cpu_profiler.d中的D脚本开始,并修改它以收集jstack。
编辑#3:好的,经过一些更多的讨论后发现开发人员自己并不知道该脚本的来源。显然,仪器中的时间分析器无论如何都不使用DTrace,因此唯一的选择是编写我们自己的DTrace脚本或工具。
你是对的,我道歉。我不确定那个脚本来自哪里,当我仔细查看它时,它没有jstack动作,所以它不是你想要的。看起来我能提供的唯一java分析选项是DTrace。 DTrace有一个配置文件提供程序,以及一个收集java堆栈的jstack操作。您可以使用“聚合”来确定最重的堆栈跟踪,所有这些都可以从命令行进行。 DTrace的文档主要由Sun维护,我会引导您访问任何DTrace教程,因为大多数都涵盖了配置文件提供程序。
尽管人们在网上说什么,但仪器并没有将DTrace用于所有内容,特别是时间分析,因此我无法在仪器UI中为您提供快速修复。
答案 0 :(得分:5)
乐器依赖于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
答案 1 :(得分:0)
我想到的一件事是-g
编译器的javac
选项包含调试信息。在eclise中(至少在helios中),您可以在“Java编译器”,“类文件生成”下设置调试数据的不同选项。也许其中一些设置被破坏了。
然而,这并未解决 method 名称的问题,这些名称始终包含在类文件中。然而,不同风格的Java VM以不同方式执行运行时优化,例如参见文档中stack traces可靠性的注释。
因此,切换到另一个(版本)VM可能会影响探查器执行正确操作的能力。 - 顺便说一句,你没有暗中“升级”你的Java版本(例如1.6到1.7)吗?
答案 2 :(得分:0)
如果你想描述java应用程序,我建议你使用Oracle的Visualvm(通过Java.net)。此工具可以将内存和cpu分析到该方法,即使对于远程JVM也是如此。在OSX上,它显然不是默认JDK的一部分,但你可以在这里得到它:http://visualvm.java.net/download.html 可能是鲨鱼的替代品。