如何在Java中找到CPU密集型类?

时间:2010-06-01 19:08:16

标签: java performance multithreading class

我有一个使用多线程的Java大程序。在某些情况下,程序开始使用我的八核系统的三个核心中的100%。在正常使用中,程序使用1-2%的所有核心。如何找到超载核心的类?

7 个答案:

答案 0 :(得分:15)

使用与jdk-1.6.0_10捆绑在一起的jvisualvm等分析器

答案 1 :(得分:6)

最好的解决方案是使用分析器 - 这就是它们的构建方式,并且有一个与Java 6捆绑在一起的很好的分析器。

另一个(远非理想的解决方案)是在调试模式下在Eclipse IDE中运行您的程序(如果这是您使用的)。然后,您可以查看正在运行的线程。如果他们中的很多人被停职,那么他们可能就是你的罪魁祸首。强制它(从工具栏)中断,你可以看到它在哪里。你有很多机会找到一个清晰的循环或忙着等待。

答案 2 :(得分:4)

使用分析器确定哪些线程正在使用所有CPU周期以及它们正在执行的方法。

答案 3 :(得分:3)

如果您使用的是Eclipse,则可以使用TPTP profiling tool

答案 4 :(得分:2)

如果您要使用商业分析器路线,那么我建议您使用Dynatrace

答案 5 :(得分:1)

尝试获取线程转储(请参阅jps,jstack命令),然后查看执行的方法。

答案 6 :(得分:1)

如果您使用的是基于UNIX的Java或某些版本的Linux,请使用Java查看DTrace。