Java应用程序分析

shstlldc  于 2023-04-19  发布在  Java
关注(0)|答案(5)|浏览(115)

我正在寻找一个Java代码分析器,我可以用它来分析我的应用程序(它是一个在后端运行的服务)在生产上(所以意味着低开销,它不能减慢我的应用程序)。主要是我想调用树分析,也就是说,如果a()调用b(),然后b()调用c(),那么a()b()和c()花了多少时间,包括和排他性的。
我已经看到了jvisualvmjprofiler,但这不是我要找的,因为我不能将我的生产应用程序绑定到它们,因为这会导致主要的性能问题。
另外,我确实使用了metricshttps://github.com/dropwizard/metrics),但它没有给予分析调用树的功能。
Callgrindhttp://valgrind.org/docs/manual/cl-manual.html)类型库是我需要的,因为它提供了调用树分析功能和高级选项,如避免调用循环(递归)。但我不确定Callgrind是否可以用于生产,因为它在程序终止时转储数据。
有没有人能推荐一个好的java调用树分析器,它可以在生产环境中使用,而不会影响性能?

3xiyfsfu

3xiyfsfu1#

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

wz3gfoph

wz3gfoph2#

一般来说,你不需要(或者我不推荐)分析器来检测你的应用程序。检测总是意味着不可控的生产开销。
您可以使用的是采样分析器。采样分析器以可控的间隔对堆栈跟踪进行快照。您不会得到调用计数,但是,经过一段时间的运行后,您可以很好地了解热点的位置。由于您可以调整分析器的采样间隔,因此可以影响它的开销。
JDK附带了一个可用的采样分析器,请参阅hprof page in the java 7 documentation。以前有一些用于hprof cpu跟踪(而不是堆跟踪)的图形分析工具。现在它们已经消失了。但是,您已经可以使用生成的文本文件。
我快速浏览了一下上面提到的Java使命Control的东西。我认为它非常强大,可以满足很多需求,在白色中他们说它只有2%的开销。然而,这并不完全是我个人需要或想要的。对于我的应用程序来说,最好一直启用“轻”分析。

v09wglhw

v09wglhw3#

Intel Amplifier XE http://software.intel.com/en-us/intel-vtune-amplifier-xe的开销很低,如果有任何值得注意的话。它使用堆栈采样技术来最大限度地减少影响,并且可以附加和分离到生产中正在运行的不间断进程。您甚至不需要在分析期间拥有源,您可以在离线性能结果浏览后深入查看源。

t8e9dugd

t8e9dugd4#

我不知道有什么工具可以在不影响性能的情况下进行性能分析。
您可以将日志记录添加到您感兴趣的方法中。你还应该配置日志框架来异步记录日志,以减少性能损失。
AspectJ这样的加载时编织器能够在运行时添加这些调用,这将允许您轻松地选择要监视的方法,而无需始终更改源代码。
使用around方面,您甚至可以添加计时日志记录,这样您就不必解析日志并尝试查找匹配的日志条目。
看看perfspytutorial),它可能已经做了你需要的开箱即用。
相关:

1cosmwyk

1cosmwyk5#

https://github.com/salesforce-misc/perfGenie看起来是一个有趣的选项,用于使用上下文过滤器和比较的配置文件/堆栈可视化。

相关问题