寻找端到端 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】:我对@987654321@ 很满意;我相信它也能满足您的所有要求。
【讨论】:
Netbeans 可以进行离线分析吗?【参考方案4】:您可以尝试JRockit Mission Control 附带的运行时分析器。它会生成录制文件,您可以稍后在 GUI 中打开这些文件。开销非常低,通常不到 1-2%,而且非常易于使用。
您可以像这样从命令行开始录制:
JROCKIT_HOME\bin>java -XXjra:recordingtime=2000s,filename=myrecording.jra,sampletime=1
如果 JVM 退出,在记录完成之前,分析数据将被刷新到磁盘。
【讨论】:
以上是关于寻找端到端 Java CPU Profiler 的建议 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章