java – 线程转储显示Runnable状态,但它挂了很长时间

我们在应用进程中遇到了一个不寻常的问题,在过去的一个月里,我们的应用进程达到了不可恢复的状态,它在应用进程重启后恢复.

背景:我们的应用进程进行数据库查询以获取一些信息,并且此数据库托管在单独的节点上.

有问题的情况:当分析线程转储时,我们看到所有线程都处于可运行状态,从数据库中获取数据,但即使在20分钟后也没有完成.

按预期发布应用进程重启所有线程都已恢复.并且CPU使用率也正常.

下面是线程转储

ThreadPool:2:47″ prio=3 tid=0x0000000007334000 nid=0x5f runnable

[0xfffffd7fe9f54000]java.lang.Thread.State: RUNNABLE at

oracle.jdbc.driver.T2CStatement.t2cParseExecuteDescribe(Native Method)

at

oracle.jdbc.driver.T2CPreparedStatement.executeForDescribe(T2CPreparedStatement.java:518)

at

oracle.jdbc.driver.T2CPreparedStatement.executeForRows(T2CPreparedStatement.java:764)

at ora

All threads in the same state.

问题:

>这个州可能是什么原因?

>在这种情况下如何恢复?