Java:如何读取锁定的线程转储

Java:如何读取锁定的线程转储,java,locking,deadlock,thread-dump,Java,Locking,Deadlock,Thread Dump,有人能帮我理解我应该如何阅读这篇文章吗 "Task-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner@488cf1f1" daemon prio=6 tid=0x000000000880f000 nid=0x644 runnable [0x00000000213ef000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.soc

有人能帮我理解我应该如何阅读这篇文章吗

"Task-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner@488cf1f1" daemon prio=6 tid=0x000000000880f000 nid=0x644 runnable [0x00000000213ef000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.DataInputStream.readFully(DataInputStream.java:178)
    at java.io.DataInputStream.readFully(DataInputStream.java:152)
    at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:841)
    at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:722)
    - locked <0x000000016ac834e0> (a java.util.ArrayList)
    at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)
    at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103)
    at net.sourceforge.jtds.jdbc.ResponseStream.peek(ResponseStream.java:88)
    at net.sourceforge.jtds.jdbc.TdsCore.wait(TdsCore.java:3928)
    at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1045)
    - locked <0x000000016ad0b838> (a net.sourceforge.jtds.jdbc.TdsCore)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1301)
    at com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnection(DefaultConnectionTester.java:73)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.testPooledConnection(C3P0PooledConnectionPool.java:374)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.refurbishIdleResource(C3P0PooledConnectionPool.java:310)
    at com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.run(BasicResourcePool.java:1999)
    at com.mchange.v2.async.ThreadPerTaskAsynchronousRunner$TaskThread.run(ThreadPerTaskAsynchronousRunner.java:255)
谢谢!
-Sean

JDBC调用中的这种锁定是正常的。我猜您的问题不在JDBC层

因为我看不到数据库控制台,所以我猜您的问题是数据库方面的两件事之一,死锁或暂停查询。再次检查数据库控制台,问题似乎不在JDBC代码中。如果看不到数据库控制台,那么在JDBC中打开SQL跟踪,查看正在运行的查询


真正的Java级死锁将在线程转储中清楚地说明这一点。您似乎有一个性能问题,数据库查询响应极慢,占用了您的所有连接。

我也遇到了同样的问题,请参阅

使用c3p0调试模型找出代码的哪个部分使用会话而不是发布

添加c3p0配置:

debugUnreturnedConnectionStackTraces = true;  
unreturnedConnectionTimeout = 20 ; // That's i used for 

如果你认为你有一个死锁,请张贴整个线程转储。FWIW,这个线程看起来很好-只是在使用db处理一些i/o。从线程转储中添加了更多线程。。。完整的线程转储对于发布来说太长了(它不允许我发布)我遇到了同样的问题,请看,谢谢,在做了更多的挖掘之后,我开始了另一个问题,它看起来确实在数据库端。
debugUnreturnedConnectionStackTraces = true;  
unreturnedConnectionTimeout = 20 ; // That's i used for