我有一个在jboss应用程序服务器中运行的Web应用程序(但它不是特定于jboss的,所以我们也可以假设它是一个tomcat或任何其他服务器)。现在我遇到的问题是一个线程似乎处于死锁状态。它始终使用100%的CPU。我已经启用了启用调试端口的服务器,我可以将Eclipse连接到它。但问题是:有很多线程在运行。我怎样才能找到合适的线程?我知道进程ID(来自Linux“top”命令),但我认为这无济于事。我是否真的需要单独打开每个线程并检查它们当前在做什么?或者有没有办法过滤线程中的“最活跃”或类似的东西?
答案 0 :(得分:2)
您可以尝试生成线程转储(CTRL + Break,如this thread所示)。
或者您可以将JConsole附加到远程会话(因此暂时将Eclipse放在一边),监视线程并生成线程转储。
alt text http://www.jroller.com/dumpster/resource/tdajconsole.png
答案 1 :(得分:1)
似乎你需要通过识别哪个线程首先占用CPU,然后由该线程执行哪个代码,然后你可以进行远程调试来缩小具有bug的代码。
我建议使用像JProfiler,jvisualvm,jconsole或类似的东西。使用这些工具之一将允许您深入了解线程正在做什么,并允许您通过使用的cpu周期对线程进行排序,以便您快速找到有问题的线程。