我们的 J2ee 服务器(出于尴尬的原因将保持匿名)有时会大幅减慢速度。我设法创建了一个线程转储。并试图分析它。我不明白的一件事是在没有找到锁定线程的情况下等待锁定。这是此类线程的堆栈跟踪的一部分:
waiting for monitor entry []
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:781)
- waiting to lock <0xsomenumber> (a org.apache.commons.pool.impl.GenericObjectPool)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
somenumber 号码只是等待。我没有看到任何东西锁定它。怎么可能?
谢谢。
更新更详细:jdk版本为1.4.2.05
最佳答案
使用 JDK 中的 JConsole 连接到您的应用程序服务器,并使用“线程” Pane 上的“检测死锁”按钮。
关于java - 帮助处理部分挂起的 j2ee 服务器的 Java 线程转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2632631/