寻找端到端Java CPU Profilers的建议

时间:2008-12-24 20:49:40

标签: java profiling

Java存在哪些优秀的端到端CPU分析器?

我正在寻找的快速列表:

  1. 脱机分析 - 程序执行期间无需用户交互或GUI。将配置文件数据转储到文件然后需要使用GUI进行查看很好,我只是不想在工作运行时保管它
  2. 端到端录制 - 在进入J2SE应用程序的主要调用后,Profiler应该能够立即开始录制。它应该在JVM退出之前立即停止录制。
  3. 调用图生成 - 在分析之后,将数据转换为可视调用图是很好的。
  4. Google有一个很好的C / C ++探查器 - http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html

    如果Java的等价物存在,那正是我正在寻找的。

    我没有将HProf包含在我的预期分析器列表中,因为与使用精确CPU调用分析时看到的其他商业分析器相比,它表现不佳(通常通过字节代码注入完成,这很慢,但是HProf出现至少比其他分析器慢一个数量级,并且当单个采样配置文件运行需要1-2个小时时,对于同一次运行等待超过一天是不可接受的)

4 个答案:

答案 0 :(得分:5)

到目前为止,我最喜欢的是JProfiler。我直到现在才意识到这一点(因为我总是使用交互式分析GUI),但它实际上支持离线分析,就像你描述的那样。

其他一些很酷的功能:

  • 它会描述您的所有SQL语句,因此您可以看到哪些数据库查询正在减慢您的速度。

  • 它跟踪哪些方法(在哪个类和包中)分配最多的内存,哪些类型的对象&数组,以及这些对象的寿命。因此,如果您正在泄漏内存,则很容易找到哪些类型的类实例超出了它们的实用性,并找到最初分配这些对象的方法(以及谁持有保持对象存活的引用)。 / p>

  • 您可以跟踪虚拟机的增长情况,监控GC完整集合的频率,并确定在每个收集周期中释放的对象数量(类型)。

  • 当然,您可以获得所有方法调用的分层细分,包括整个调用堆栈的调用次数和平均执行时间(独占或包含)。您还可以从“最坏瓶颈”函数的角度查看此层次结构,按执行时间或内存分配排序。

对我来说,JProfiler是我开发过程中最重要的工具之一(仅次于Eclipse)。


另外:有一个free 10-day trial。下载并查看。而且,顺便说一下,我不是公司或任何东西的附属品。在过去的五六年里,我一直是一个快乐的客户。

答案 1 :(得分:3)

我不熟悉离线分析。这不是hprof的用途吗?否则我对YourKit profiler有很好的体验。

答案 2 :(得分:1)

我对NetBeans Profiler非常满意;我相信它也满足您的所有要求。

答案 3 :(得分:0)

您可以尝试JRockit Mission Control附带的运行时分析器。它会生成您稍后可以在GUI中打开的录制文件。开销非常低,通常低于1-2%,而且非常容易使用。

您可以从命令行开始录制,如下所示:

  

JROCKIT_HOME \ bin> java -XXjra:recordingtime = 2000s,filename = myrecording.jra,sampletime = 1

如果JVM退出,则在录制完成之前,分析数据将刷新到光盘。