6

有哪些适用于 Java 的端到端 CPU 分析器?

我正在寻找的东西的快速列表:

  1. 离线分析 - 程序执行期间无需用户交互或 GUI。将配置文件数据转储到文件中,然后需要使用 GUI 进行查看很好,我只是不想在作业运行时照看它
  2. 端到端记录 - Profiler 应该能够在输入 J2SE 应用程序的主要调用后立即开始记录。它应该在 JVM 退出之前立即停止记录。
  3. 调用图生成 - 分析后,最好将数据转换为可视调用图。

谷歌有一个很好的 C/C++ 分析器 - http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html

如果存在与此等效的 Java,那么它正是我正在寻找的。

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

4

4 回答 4

5

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

其他一些很酷的功能:

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

  • 它跟踪哪些方法(在哪些类和包中)分配了最多的内存,哪些类型的对象和数组,以及这些对象的寿命。因此,如果您正在泄漏内存,则很容易追踪哪些类型的类实例已经过时,并找到最初分配这些对象的方法(以及谁持有使对象保持活动状态的引用)。

  • 您可以跟踪 VM 增长,监控 GC 完整收集的频率,并确定在每个收集周期中释放了多少对象(哪种类型)。

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

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


另外:还有10 天免费试用。下载并查看。而且,顺便说一句,我不隶属于公司或任何东西。在过去的五六年里,我一直是一个快乐的客户。

于 2008-12-24T21:39:46.153 回答
3

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

于 2008-12-24T21:04:17.240 回答
1

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

于 2008-12-24T21:23:44.377 回答
0

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

您可以像这样从命令行开始录制:

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

如果 JVM 退出,在记录完成之前,分析数据将被刷新到磁盘。

于 2008-12-25T06:56:46.670 回答