Java 应用程序分析

我正在寻找一个Java代码分析器,我可以用来在生产中分析我的应用程序(它是在后端运行的服务)(所以意味着低昂,它不能减慢我的应用程序)。我主要想要调用树分析,也就是说,如果a()调用b(),然后b()调用c(),那么a()b()和c()花了多长时间,包括和排他性。

已经看过 和 ,但这不是我正在寻找的,因为我无法将生产应用程序绑定到它们,因为这会导致严重的性能问题。jvisualvmjprofiler

另外,我确实经历了(https://github.com/dropwizard/metrics),但它没有给我一个功能来分析调用树。metrics

Callgrind (http://valgrind.org/docs/manual/cl-manual.html)类型库是我需要的,因为它提供了调用树分析功能和高级选项,如避免调用周期(递归)。但我不确定Callgrind是否可以用于生产,因为它会在程序终止时转储数据。

任何人都可以建议为java调用树探查器,可以在生产中使用而不会影响性能吗?


答案 1

结合飞行记录器来看看Java Mission Control。从Oracle JDK 7 Update 40(7u40)的发布开始,Java Mission Control与HotSpot JVM捆绑在一起,因此它是高度集成的,并且声称对运行时性能的影响很小。我刚刚开始研究它,我确实看到了一些调用树功能。

enter image description here


答案 2

通常,您不会(或我不建议)检测应用程序的探查器。检测总是意味着无法控制的生产开销。

您可以使用的是采样探查器。采样探查器以可控的时间间隔创建堆栈跟踪的快照。您没有得到的是调用计数,但是,在一些运行时之后,您可以很好地概述热点的位置。由于您可以调整探查器的采样间隔,因此可以影响其开销。

可用的采样探查器随 JDK 一起提供,请参阅 java 7 文档中的 hprof 页面。以前,存在一些用于 hprof cpu 跟踪(而不是堆跟踪)的图形分析工具。现在他们走了。但是,您已经可以使用生成的文本文件。

我快速浏览了上面提到的Java任务控制的东西。我认为它非常强大,可以满足很多需求,在白皮书中他们说它只有2%的开销。但是,这并不完全是我个人需要或想要的。对于我的应用程序,最好始终启用“轻量级”分析。


推荐