开发者社区> 问答> 正文

线程一直runable,一直hang在socketRead0处

"Thread-4" daemon prio=10 tid=0x00007f2c6000c000 nid=0x2455 runnable [0x00007f2c55deb000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketInputStream.read(SocketInputStream.java:122) at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:100) at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:143) at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:173) - locked <0x00000007b09ea480> (a com.mysql.jdbc.util.ReadAheadInputStream) at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2954) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3375) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3365) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3805) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) - locked <0x00000007b09dcfb8> (a com.mysql.jdbc.JDBC4Connection) at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874) - locked <0x00000007b09dcfb8> (a com.mysql.jdbc.JDBC4Connection) at com.alibaba.druid.pool.DruidPooledConnection.setAutoCommit(DruidPooledConnection.java:694) at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:225)

以上是jstack得到的线程状态,多次dump都发现该线程一直不返回,也一直不超时!!!

原提问者GitHub用户Yaccc

展开
收起
山海行 2023-07-05 21:06:59 220 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    如果您的Java程序在执行期间一直处于RUNNABLE状态,且在socketRead0处挂起,这通常表示程序正在等待从Socket套接字读取数据,但是没有收到数据或者数据传输被阻塞了。

    这可能是由于以下原因导致的:

    网络故障
    如果您的程序与远程服务器之间的网络连接出现问题,可能会导致数据传输被阻塞。您可以检查网络连接是否正常,检查防火墙设置,或者尝试在其他网络环境下运行程序。

    数据传输问题
    如果数据传输过程中出现问题,可能会导致程序在读取数据时被阻塞。您可以尝试重新连接服务器,或者检查服务器是否正常运行。

    程序逻辑问题
    如果程序在读取数据时出现逻辑问题,可能会导致程序一直处于RUNNABLE状态。您可以检查程序逻辑是否正确,是否有死循环或者逻辑错误。

    2023-07-30 10:07:00
    赞同 展开评论 打赏
  • 解决了,原因是网络抖动,同时因为没有设置socketTimeout,导致一直卡在setAutoCommit时一直read数据

    原回答者GitHub用户Yaccc

    2023-07-06 11:54:09
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载