2011-12-09 34 views
9

我在写一个使用Java的算法实现。在OS X 10.7之前,我使用了Shark Profiler来描述我的实现,这很好地工作。但是,新仪器不再找到过程名称。我已经尝试用鲨鱼的VM参数(即-agentlib:Shark)运行java应用程序,但它们对于10.7是未知的,我找不到这样的instrumentlib用于乐器。在Time Profiler,Instruments,OS X中缺少JAVA过程名称

有关如何将过程名称附加到Insturments中的符号名称(这是一些十六进制数字)的任何想法?我使用Eclipse Indigo,如果这有什么不同。

谢谢!

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

编辑#2:(?)通过苹果的bug记者从开发商的更新:

的DTrace对Java已支持在过去的分堆,但老实说,我不能说是否支持一直保持着。对于您要测量的内容而言,这可能是一种可行的解决方法 - 否则,对于此时的性能工具而言,这不是优先考虑的因素。你可能想从/usr/bin/cpu_profiler.d中的D脚本开始,并修改它以收集jstack。

编辑#3:好的,经过多次讨论后发现开发者自己并不知道脚本来自哪里。显然,Instruments中的时间剖析器不会使用DTrace,因此剩下的唯一选择是编写我们自己的DTrace脚本或工具。

你说得对,我很抱歉。我不确定脚本是从哪里来的,当我仔细看过它时,它没有jstack动作,所以它不是你想要的。它看起来像我可以为您提供的唯一一个java分析选项是DTrace。 DTrace有一个配置文件提供程序和一个收集java堆栈的jstack操作。您可以使用“聚合”来确定最重的堆栈轨迹,并且所有这些都可以从命令行运行。 DTrace的文档主要由Sun维护,因为大多数文档提供程序都涵盖了该文档,所以我会引导您参阅任何DTrace教程。

尽管人们在网上说什么,Instruments并没有将DTrace用于任何事情,特别是时间分析,所以我无法为您提供仪器UI中的快速修复。

回答

5

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

所以,不幸的是,你不会从这些工具获取这些信息,直到Apple修复他们的东西。 :(

关注这个主题的更多信息:http://www.mail-archive.com/[email protected]/msg04863.html

我已经提交一个bug与苹果关于他们缺乏帮手栈示踪剂的支持,如果你想要这个功能,您应该提交错误太:https://bugreport.apple.com

+0

太好了,谢谢。我希望这个问题很快就会得到解决,尽管这个问题已经存在很长一段时间了。我将提交一份错误报告。 – HdM

+0

所以,我从一位开发人员那里得到了一个更新: “dtrace在过去的几个点上都支持Java堆栈,尽管我真的不知道支持是否得到维护。这可能是一个可行的解决方法对于你正在测试的内容 - 对于性能测试工具来说,这不是优先考虑的事情,你可能想从/usr/bin/cpu_profiler.d中的D脚本开始,并修改它以收集jstack “。 – HdM

+0

如果你有任何工作,我会很感兴趣。 –

0

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

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

因此,切换到另一个(版本)VM可能会影响分析器做正确事情的能力。 - 顺便说一句,在这个过程中,你没有隐式地升级你的Java版本(例如1.6到1.7)?

+1

我确实升级到了非苹果的java版本,尽管据我所知,这个“bug”一直存在,缺少的“worksforme”文章表明它可能与vm无关,我认为它更多如果找到一个dtace钩,我会试试这个问题 – HdM

0

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

+0

我尝试了visualvm,但是我对它很不满意,和鲨鱼或者乐器相比,它笨重,有着荒谬的开销,而且非常困难即使使用eclipse插件也可以开始。对我而言,这不是一种选择。 – HdM

相关问题