繁体   English   中英

Java 应用分析

[英]Java application profiling

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

看过jvisualvmjprofiler ,但这不是我想要的,因为我不能将我的生产应用程序绑定到它们,因为它会导致主要的性能问题。

此外,我通过metrics ( https://github.com/dropwizard/metrics ) 做了 go,但它没有给我分析调用树的功能。

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

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

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

在此处输入图片说明

一般来说,您不会(或者我不会推荐)分析您的应用程序的分析器。 仪器仪表总是意味着无法控制的生产开销。

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

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

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

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

我不知道有什么工具可以在不影响性能的情况下进行分析。

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

AspectJ这样的加载时间编织器能够在运行时添加这些调用,这将允许您轻松选择要监视的方法,而无需一直更改源代码。

使用around方面,您甚至可以添加计时日志记录,因此您不必解析日志并尝试查找匹配的日志条目。 有关详细信息,请参阅此博客文章

看看perfspy教程),它可能已经开箱即用地满足您的需求。

有关的:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM