Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java应用程序评测_Java_Performance_Profiling_Metrics_Jprofiler - Fatal编程技术网

Java应用程序评测

Java应用程序评测,java,performance,profiling,metrics,jprofiler,Java,Performance,Profiling,Metrics,Jprofiler,我正在寻找一个Java代码分析器,我可以使用它在生产环境中评测我的应用程序(它是一个在后端运行的服务)(这意味着低成本,而且它不能减慢我的应用程序)。我主要想调用树分析,也就是说,如果a()调用b(),然后b()调用c(),那么a()b()和c()所用的时间(包括和排除)是多少 我已经看过jvisualvm和jprofiler,但这不是我想要的,因为我无法将我的生产应用程序与它们绑定,因为这将导致严重的性能问题 另外,我也讨论了指标(),但它没有为我提供分析调用树的功能 Callgrind()类

我正在寻找一个Java代码分析器,我可以使用它在生产环境中评测我的应用程序(它是一个在后端运行的服务)(这意味着低成本,而且它不能减慢我的应用程序)。我主要想调用树分析,也就是说,如果a()调用b(),然后b()调用c(),那么a()b()和c()所用的时间(包括和排除)是多少

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

另外,我也讨论了
指标
(),但它没有为我提供分析调用树的功能

Callgrind
()类型库是我所需要的,因为它提供了调用树分析功能和避免调用周期(递归)等高级选项。但我不确定Callgrind是否可以用于生产,因为它在程序终止时转储数据


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

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

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

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

使用
around
特性,您甚至可以添加计时日志,这样您就不必解析日志并尝试查找匹配的日志条目

看一下(),它可能已经完成了您需要的现成功能

相关的:

英特尔放大器XE的开销很低(如果有)。它使用堆栈采样技术将影响降至最低,并且可以连接和分离生产中运行的不间断流程。您甚至不需要在评测期间拥有源代码,您可以在脱机性能结果浏览之后深入了解源代码。

请结合查看。从发布OracleJDK7Update40(7u40)开始,Java任务控制与HotSpot JVM捆绑在一起,因此它具有高度集成性,并声称对运行时性能的影响很小。我刚刚开始研究它,我确实看到了一些调用树功能

一般来说,您不需要(或者我不推荐)为应用程序添加工具的分析器。检测总是意味着无法控制的生产开销

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

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


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

如果我没有记错,您可以从另一个JVM(如JRockit)获得更多信息。我是基于对过去几年的模糊回忆,你记得的JRockit评测功能已经整合到Oracle的JVM版本7u40+中。请看我下面关于任务控制和飞行记录器的回答。方面很棒!但是使用aspect调用树分析会太多,并且可能会影响应用程序的性能。你不这么认为吗?是的,我在第一句话中就这么说了。你只能尝试在少数地方编织相位;通常,一个高级方法足以看出大部分性能都花在了代码的哪一部分上。始终记住80%的代码已经足够好了。你需要确定80%的时间花在20%的地方。我还希望有一个简单的一键解决方案,但我还没有看到。注意:虽然乍一看它可能不像Java的工具,但它支持Java。请记住,任务控制和飞行记录器不是自由软件。显然,在2018年,任务控制变成了开源。看见