2010-09-23 61 views
11

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

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

前两项措施是实时的。最后一次测量只有一个线程的CPU时间。我想测量进程产生的所有线程的CPU时间。

在复活旧机器并将其专用于此任务之前,我想看看现在有什么选项。

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

+2

请参阅“Java理论与实践:动态编译和性能度量”,网址为http://www.ibm.com/developerworks/java/library/j-jtp12214/。这是一个评论,而不是答案:-) – Istao 2010-09-23 09:53:48

+0

看看这个插件的来源 - JTop:http://blogs.oracle.com/alanb/entry/two_fine_demos – 2010-09-27 10:31:04

回答

11

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

+0

我很确定perf4j措施的实时,而不是CPU时间。尽管我喜欢这些图表。 – Alexandru 2010-09-23 09:49:05

+0

@Alexandru我相信这是要求。至少这是我从这个问题所了解到的...... – 2010-09-23 10:03:27

+0

你说得对,我还不够清楚。实时问题是如果我浏览LOL @Alexandru的StackOverflow – Alexandru 2010-09-23 10:52:58

2

尝试使用Dtrace启用JVM。 它有很多的性能探测器,可以帮助你得到你想要的东西。

+0

Dtrace是否仅在Solaris下才可用? – Alexandru 2010-09-23 09:58:16

+0

Dtrace可用于openSolaris以及Freebsd.One可以完成的任务是在任一操作系统上获取Java应用程序,以执行性能测试并获取数字。 – gaurav 2010-09-23 10:08:38

+0

Dtrace在Mac OS X上也可用。但在Mac OS X JVM中启用的Dtrace探测器可能与为Solaris启用的Dtrace探测器不同。 – mattbh 2010-10-20 22:52:16