1

我在我们的开发应用程序中面临着 java 线程挂起的问题。以下是日志跟踪:  

020 SystemOut     O --------------------------------------------------------------------------------
[8/1/12 11:00:21:136 CDT] 00000023 ThreadMonitor W   WSVR0605W: Thread "WebContainer : 6" (00000027) has been active for 731757 milliseconds and may be hung.  There is/are 2 thread(s) in total in the server that may be hung.
[8/1/12 11:00:24:626 CDT] 00000021 FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/RTNCTR_DEV.
[8/1/12 11:00:24:636 CDT] 00000021 SystemOut     O 
[8/1/12 11:00:24:636 CDT] 00000021 SystemOut     O --------------------------------------------------------------------------------

无法找到此问题的根本原因,请提供可能的解决方案,请在我被卡住的情况下请各位大神指教..!!

4

2 回答 2

2

对于初学者,您想通过请求javacore thread dump来查找该特定线程的卡住位置。

在 UNIX 平台上,您只需在进程 ID 上发出 kill -3。在 Windows 上,您需要使用wsadmin 命令(它也适用于 UNIX,但不如 kill -3 快)。

在结果文件中搜索WebContainer : 6,该线程的堆栈跟踪将向您显示线程在应用程序或 WebSphere 中的哪个位置卡住了。

请参阅WebSphere Application Server 中 javacore 文件的问题确定

于 2012-08-14T14:08:40.690 回答
2

看起来它在等待与数据源“jdbc/RTNCTR_DEV”的连接时被卡住了。我的猜测是您没有可用的连接,或者您的应用程序正在泄漏它们。做 beny23 之前所说的检查连接是否有效(也许在重新启动之后),如果它确实有效并且突然停止(比如在 10 次查询之后),那么您就有泄漏。如果它们根本不起作用,请查看 WAS 中的数据源配置。

如果它是泄漏,那么通过您的应用程序并找到您没有将连接返回到池或关闭连接的位置 - 这一切都取决于您的应用程序的工作方式。

我们也遇到了类似的问题。原来通过在数据源上添加自定义设置以将连接设置设置为 false 来解决。我们当然首先确定泄漏连接的不是我们的应用程序。

于 2012-08-14T22:09:17.827 回答