寻找端到端 Java CPU Profiler 的建议 [关闭]

Posted

技术标签:

【中文标题】寻找端到端 Java CPU Profiler 的建议 [关闭]【英文标题】:Looking for recommendations for end-to-end Java CPU Profilers [closed] 【发布时间】:2008-12-24 20:49:40 【问题描述】:

Java 有哪些好的端到端 CPU 分析器?

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

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

Google 有一个不错的 C/C++ 分析器 - http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html

如果存在与此等效的 Java,那正是我正在寻找的。​​p>

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

【问题讨论】:

【参考方案1】:

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

其他一些很酷的功能:

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

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

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

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

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


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

【讨论】:

我对 JProfiler 的唯一主要抱怨是我无法使用离线分析进行真正的端到端快照。看来,随着 12-17 的更新,他们添加了 JVM Start 和 JVM Exit 作为有效的触发目标,所以我现在可以让它工作了!【参考方案2】:

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

【讨论】:

Hprof 似乎存在性能不佳的问题。我可能错过了,但我不知道如何进行端到端分析,或者如何在没有使用 YourKit 附加 GUI 的情况下在远程机器上进行分析【参考方案3】:

我对@9​​87654321@ 很满意;我相信它也能满足您的所有要求。

【讨论】:

Netbeans 可以进行离线分析吗?【参考方案4】:

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

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

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

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

【讨论】:

以上是关于寻找端到端 Java CPU Profiler 的建议 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

寻找 C++ 到 WPF/Cocoa 互操作性的跨平台、端到端示例

端到端测试框架建议

TURN 上的 WebRTC 流量是不是端到端加密?

端到端测试应该每次都运行登录设置吗?

端到端E2E

IM聊天传输内容端到端加密技术