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

11

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

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

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

在唤醒一台旧机器并将其用于此任务之前,我想看看现在有哪些选项。

我运行Linux,可接受平台相关的解决方案,但是最不理想的。


2
请参阅“Java理论与实践:动态编译和性能测量”,链接为http://www.ibm.com/developerworks/java/library/j-jtp12214/。这只是一个评论,而非答案 :-) - Istao
请查看此插件的源代码 - JTop:http://blogs.oracle.com/alanb/entry/two_fine_demos - mnasce zewdu
2个回答

11

我相当确定perf4j测量的是实时时间而不是CPU时间。不过我喜欢这些图表。 - Alexandru
@Alexandru 我相信这就是要求。至少这是我从问题中理解的... - Eran Harel
你说得对,我表达不够清晰。实时性的问题在于,如果我浏览StackOverflow,运行时间会发生变化。 - Alexandru
LOL @Alexandru。在你浏览网页时不要进行性能测试,至少不要使用同一台机器 ;) - Eran Harel

2

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


Dtrace不仅适用于Solaris吗? - Alexandru
Dtrace可用于OpenSolaris和Freebsd。其中一件事是在任一操作系统上获取Java应用程序,以进行性能测试并获得数字。 - gaurav
Dtrace也可在Mac OS X上使用。但是,在Mac OS X JVM中启用的Dtrace探针可能与为Solaris启用的探针不同。 - mattbh
@gaurav 不管DTrace方法有多么引人入胜,它能用于任何高级别的东西还是只是用于低级别的? - Thorbjørn Ravn Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接