我在大约每7-8天就会得到这个错误。因此,为了调试此问题,我下载了线程转储文件。此文件有以下线程状态100次:
"http-8080-198" daemon prio=10 tid=0x08a62c00 nid=0x3a78 in Object.wait() [0x66467000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x87097728> (a org.apache.commons.pool.impl.GenericObjectPool$Latch)
at java.lang.Object.wait(Object.java:485)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)
- locked <0x87097728> (a org.apache.commons.pool.impl.GenericObjectPool$Latch)所以我的问题是:
发布于 2014-09-30 15:19:19
我在大约每7-8天就会得到这个错误。
最有可能的情况是,您没有决定性地清理所有资源(即,当您完成这些资源时),因此可以将连接返回到池中。GC将定期清理连接,但有时这还不够。简而言之,确保你总是在循环你的连接(除非它们已经死了)。
这是因为mysql连接池的异常吗?
这不是一个例外,它是您要求转储的堆栈跟踪。事实上,在线程转储中看不到异常(除非在非常罕见的事件中,您碰巧看到它创建了异常)。
如果不是这样的话,那么我如何才能知道哪些功能包含线程呢?
这些线程处于这种状态,因为它们没有什么可做的。很可能是因为另一个应该做某事的线程花费的时间太长了。我建议您查看正在运行的线程,或者在代码中等待的线程,看看哪些线程可能阻塞您的应用程序。
https://stackoverflow.com/questions/26124059
复制相似问题