分析短期Java应用程序

时间:2010-04-16 20:54:13

标签: java optimization profiling profiler

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

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

10 个答案:

答案 0 :(得分:8)

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

它提供了两种方法:

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

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

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

    时序

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

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

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


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

    可以使用java -agentlib:hprof=help获取完整帮助,也可以在Oracles documentation

    上找到

答案 1 :(得分:5)

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

-Xprof            output cpu profiling data

答案 2 :(得分:4)

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

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

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

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

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

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

答案 3 :(得分:4)

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

答案 4 :(得分:2)

如果时间不够长,只需绕一圈,如果你愿意,可以无限循环。这对于在函数或代码行中花费的包含时间百分比没有影响。然后,鉴于它花了很多时间,I just rely on this technique。这告诉哪些代码行,无论它们是否是函数调用,都花费了最高的时间百分比,因此如果可以避免则会获得最大的代价。

答案 5 :(得分:2)

启动应用程序并启用分析,等待分析器附加。任何符合Java分析架构的分析器都应该有效。我已经尝试使用NetBeans的分析器。

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

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

http://profiler.netbeans.org/

答案 6 :(得分:1)

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

答案 7 :(得分:1)

您可以使用测量(测光)录音:http://www.jinspired.com/site/case-study-scala-compiler-part-9 您还可以检查生成的快照:http://www.jinspired.com/site/case-study-scala-compiler-part-10

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

YourKit可以拍摄个人资料会话的快照,稍后可以在YourKit GUI中进行分析。我使用它来分析我工作的命令行短期应用程序。有关详细信息,请参阅我对this question的回答。