gpt4 book ai didi

java - 显示可运行状态的线程转储,但它已挂起很长时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:15 24 4
gpt4 key购买 nike

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

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

问题案例:分析线程转储时,我们看到所有线程都处于可运行状态,正在从数据库中获取数据,但即使在 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.

问题:

  1. 出现这种状态的原因可能是什么?
  2. 这种情况下如何恢复?

最佳答案

它可能正在等待来自数据库服务器的网络数据。在 I/O 上等待(阻塞)的 Java 线程被 JVM 描述为处于 RUNNABLE 状态,即使从程序的角度来看它们是阻塞的。

关于java - 显示可运行状态的线程转储,但它已挂起很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8967702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com