Java应用程序分析

问题描述 投票:17回答:4

我正在寻找一个Java代码探查器,该探查器可用于在生产环境中探查我的应用程序(它在后端运行的服务)(这意味着开销很低,并且一定不会减慢我的应用程序的速度)。首先,我想调用树分析,也就是说,如果a()调用b(),然后b()调用c(),那么a(),b()和c()花费了多少时间(包括和排除)。

已经看过jvisualvmjprofiler,但这不是我想要的,因为我无法将生产应用程序与它们绑定在一起,因为这将导致严重的性能问题。

此外,我确实经历了metricshttps://github.com/dropwizard/metrics),但它没有给我提供分析调用树的功能。

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

任何人都可以为Java推荐一个好的调用树分析器,该分析器可以在不影响性能的情况下用于生产吗?

java performance profiling metrics jprofiler
4个回答
13
投票

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9PdW5ycy5wbmcifQ==” alt =“在此处输入图像描述”>


10
投票

通常,您不(或我不推荐)分析器来检测您的应用程序。仪表总是意味着无法控制的生产开销。

您可以使用采样分析器。采样探查器以可控制的间隔对堆栈跟踪进行快照。您没有得到呼叫计数,但是经过一段时间的运行后,您可以很好地了解热点所在。由于可以调整探查器的采样间隔,因此可以影响探查器的开销。

JDK随附了一个可用的采样分析器,请参见hprof page in the java 7 documentation。以前,存在一些用于hprof cpu跟踪(而不是堆跟踪)的图形分析工具。现在他们走了。但是,您已经可以使用生成的文本文件。

我快速浏览了上面提到的Java Mission Control。我认为这非常强大,并且可以满足很多需求,他们在白皮书中说仅开销为2%。但是,这并不是我个人完全需要或想要的。对于我的应用程序,最好一直启用“轻型”配置文件。


4
投票

Intel Amplifier XE http://software.intel.com/en-us/intel-vtune-amplifier-xe的开销很低,如果有的话。它使用堆栈采样技术来最大程度地减少影响,并且可以将其连接和分离到生产中运行的不间断流程中。在剖析过程中,您甚至不需要来源,您可以在离线性能结果浏览之后再深入研究来源。


1
投票

我不知道任何可以进行性能分析而不影响性能的工具。

您可以将日志记录添加到您感兴趣的方法中。请确保在日志中包括时间戳;然后就可以进行计时了。您还应该配置日志记录框架以异步记录日志,以减少性能损失。

[C0之类的加载时间编织器能够在运行时添加这些调用,这使您可以轻松选择要监视的方法,而无需始终更改源代码。

使用AspectJ方面,您甚至可以添加定时日志记录,因此您不必解析日志并尝试查找匹配的日志条目。 around

[查看See this blog post for detailsperfspy),它可能已经开箱即用。

相关:

© www.soinside.com 2019 - 2024. All rights reserved.