我在开发应用程序中遇到挂起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 --------------------------------------------------------------------------------
无法找到这个问题的根本原因,请告知可能的解决方案,请各位建议,因为我被困了...... !!
答案 0 :(得分:2)
对于初学者,您希望通过请求javacore thread dump来查找特定线程所在的位置。
在UNIX平台上,您只需在进程ID上发出kill -3。在Windows上,您需要使用wsadmin commands(这也适用于UNIX,但不如kill -3快。)
在结果文件中搜索WebContainer : 6
,该线程的堆栈跟踪将显示应用程序或WebSphere中线程卡在哪里。
请参阅Problem determination for javacore files from WebSphere Application Server。
答案 1 :(得分:2)
看起来它等待连接到数据源'jdbc / RTNCTR_DEV'。我的猜测是你没有连接可用,或者你的应用程序正在泄漏它们。做beny23之前说的那就是检查连接是否有效(可能在重启之后),如果它确实有效并突然停止(比如10次查询后),那么你就有泄漏。如果它们根本不起作用,请查看WAS中的数据源配置。
如果它是泄漏,那么请通过您的应用程序找到您没有返回到池的连接或关闭连接的位置 - 所有这些都取决于您的应用程序的工作方式。
我们也遇到了类似问题。通过在数据源上添加自定义设置将连接设置设置为false,可以解决此问题。我们当然首先确定我们的应用程序不是泄漏连接。