繁体   English   中英

分析短期Java应用程序

[英]Profiling short-lived Java applications

是否有任何Java分析器允许分析短期应用程序? 到目前为止,我发现的分析器似乎适用于在用户终止之前一直运行的应用程序。 但是,我想要分析像命令行实用程序一样工作的应用程序,它会立即运行和退出。 像visualvm或NetBeans Profiler这样的工具甚至无法识别应用程序是否已运行。

我正在寻找类似于Python的cProfile的东西,因为当应用程序退出时会返回探查器结果。

您可以使用JVM内置HPROF来分析您的应用程序。

它提供了两种方法:

  1. 对堆栈上的活动方法进行采样
  2. 使用注入字节码的时序方法执行时间(BCI,字节码编码注入)

采样

此方法显示了在堆栈顶部找到方法的频率。

java -agentlib:hprof=cpu=samples,file=profile.txt ...

定时

此方法计算方法的实际调用。 仪表代码已由JVM预先注入。

java -agentlib:hprof=cpu=times,file=profile.txt ...

注意:此方法会大大减慢执行时间。


对于这两种方法,如果file=选项不存在,则默认文件名为java.hprof.txt

可以使用java -agentlib:hprof=help获取完整帮助,也可以在Oracles文档中找到

Sun Java 6具有java -Xprof开关,它可以为您提供一些分析数据。

-Xprof            output cpu profiling data

对正在运行的Java应用程序进行概要分析存在一些技术难题:

  • 分析工具通常通过定期对处理器的SP或PC寄存器进行采样来查看应用程序当前正在执行的位置。 如果您的申请是短暂的,可能会没有足够的样本来获得准确的图片。

您可以通过修改应用程序以循环运行多次来解决此问题,如@Mike所建议的那样。 如果您的应用程序调用System.exit() ,您将遇到问题,但主要问题是......

  • JVM预热效果可能会扭曲短期Java应用程序的性能特征。 将大量时间用于加载应用程序所需的类。 然后你的代码(和库代码)将被解释一下,直到JIT编译器找出需要编译为本机代码的内容。 最后,JIT编译器将花时间完成其工作。

我不知道分析器是否试图补偿JVM预热效果。 但即使他们这样做,这些影响也会影响应用程序的实际行为,并且应用程序开发人员可以做很多事情来缓解它们。

回到我之前的观点......如果你在循环中运行一个短暂的应用程序,你实际上正在做一些修改其正常执行模式并删除JVM预热组​​件的东西。 因此,当您优化在修改后的应用程序中占用(比如说)50%执行时间的方法时,这实际上是50%的时间, 不包括JVM预热 如果JVM预热正在使用(比如说)正常执行应用程序的80%的执行时间,那么实际上你正在优化20%的50%...这是不值得的。

运行30秒的程序不会短暂。 你想要的是一个可以启动程序的分析器,而不是你必须连接到正在运行的系统。 我相信大多数剖析器都可以做到这一点,但你很可能会喜欢在IDE中集成最好的。 看看Netbeans吧。

如果它没有花费足够长的时间,只需在它周围环绕一个循环,如果你愿意,可以使用无限循环。 这对于在函数或代码行中花费的包含时间百分比没有影响。 然后,鉴于它需要花费大量时间, 我只依靠这种技术 这告诉哪些代码行,无论它们是否是函数调用,都花费了最高的时间百分比,因此如果可以避免则会获得最大的代价。

打开配置文件启动应用程序,等待分析器附加。 任何符合Java分析架构的分析器都应该有效。 我用NetBeans的探查器试过这个。

基本上,当您的应用程序启动时,它会等待在执行之前附加一个分析器。 因此,从技术上讲,甚至可以对代码执行行进行分析。

使用这种方法,您可以分析线程,内存,CPU,方法/类调用时间/持续时间等各种事物...

http://profiler.netbeans.org/

无论您的运行有多短, SD Java Profiler都可以捕获语句块执行计数数据。 相对执行计数将告诉您花费的时间。

您可以使用测量(计量)记录: http//www.jinspired.com/site/case-study-scala-compiler-part-9您还可以检查生成的快照: http//www.jinspired.com /网站/案例研究-斯卡拉编译部分-10

免责声明:我是JXInsight / OpenCore的架构师。

我建议你试试你的套装。 它可以从一开始就进行分析,并在程序结束时转储结果。 您必须为此付费,但您可以获得eval许可证或使用没有EAP版本的EAP版本。 (时间有限)

YourKit可以拍摄配置文件会话的快照,稍后可以在YourKit GUI中进行分析。 我使用它来分析我工作的命令行短期应用程序。 有关详细信息,请参阅此问题的答案。

暂无
暂无

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

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