问题 如何衡量Java应用程序的性能?


我有一个CPU密集型多线程Java应用程序,我正在寻找在运行时测量其性能的方法(对自动化很有用)。我试了几个选择

System.currentTimeMillis();
System.nanoTime();
ThreadMXBean.getThreadCPUTime();

前两个测量实时。最后一个测量只有一个线程的CPU时间。我想测量进程生成的所有线程的CPU时间。

在复活旧机器并将其专门用于此任务之前,我想看看我现在有哪些选择。

我运行Linux并且平台相关的解决方案是可以接受的,但最不可取。


6970
2017-09-23 09:23


起源

请参阅“Java理论与实践:动态编译和性能测量” ibm.com/developerworks/java/library/j-jtp12214。这是评论,而不是答案:-) - Istao
看看这个插件的来源 - JTop: blogs.oracle.com/alanb/entry/two_fine_demos - mnasce zewdu


答案:


试试perf4j: http://perf4j.codehaus.org/ 我建议将它与AOP一起使用,但这不是必须的。看到 http://perf4j.codehaus.org/devguide.html#Using_Spring_AOP_to_Integrate_Timing_Aspects 有关AOP的更多详细信息。


11
2017-09-23 09:26



我很确定perf4j可以测量实时而不是CPU时间。我喜欢这些图表。 - Alexandru
@Alexandru我相信这是要求。至少这是我从问题中理解的...... - Eran Harel
你是对的,我不够清楚。实时问题是,如果我浏览StackOverflow,运行时间会发生变化 - Alexandru
哈哈@Alexandru。上网时没有性能测试。如果你使用同一台机器,至少不会;) - Eran Harel


尝试使用Dtrace启用JVM。 它有许多性能探测器,可以帮助您获得所需的任何内容。


2
2017-09-23 09:32



Dtrace不仅仅在Solaris下可用吗? - Alexandru
Dtrace可用于openSolaris以及Freebsd.One可以做的就是在任一操作系统上获取java应用程序只是为了执行它并获取数字。 - gaurav
Dtrace也可在Mac OS X上使用。但Mac OS X JVM中启用的Dtrace探针可能与Solaris启用的不同。 - mattbh
@gaurav DTrace方法有多么吸引人,它可以用于任何高级别的东西,还是只用于低级别的东西? - Thorbjørn Ravn Andersen