问题描述:
(1)应用首页能轻松打开,但登陆的时候(与数据库打交道)迟迟没有响应!
(2)此时,杀几个javacore,并从javacore中可以看出大部分线程来到数据源连接的请求时,就止步了:
"Servlet.Engine.Transports : 24501" (TID:0x78E86030, sys_thread_t:0x55801E28, state:CW, native ID:0
at java.lang.Object.wait(Native Method)
at com.ibm.ejs.j2c.poolmanager.FreePool.queueRequest(FreePool.java(Compiled Code))
at com.ibm.ejs.j2c.poolmanager.FreePool.createOrWaitForConnection(FreePool.java(Compiled Code))
at com.ibm.ejs.j2c.poolmanager.PoolManager.reserve(PoolManager.java(Compiled Code))
at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java(Compiled Code))
at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java(Compiled Code))
... ...
(3)再查看同时间段的SystemOut.log,发现包了大量的数据源申请失败或超时的异常,并有线程被Hung的现象:
677308f2 FreePool E J2CA0045E: Connection not available while invoking method queueRequest for resource jdbc/ABCDataSource.
180908f4 FreePool E J2CA0045E: Connection not available while invoking method queueRequest for resource jdbc/AEPDataSource.
180908f4 ConnectionMan E J2CA0020E: The Connection Pool Manager could not allocate a Managed Connection: com.ibm.websphere.ce.j2c.ConnectionWaitTimeoutException: Connection not available, Timed out waiting for 182463
... ...
1a8489f ThreadMonitor W WSVR0605W: Thread "Servlet.Engine.Transports : 24657" (3e2fc8f7) has been active for 729,663 milliseconds and may be hung. There are 3 threads in total in the server that may be hung.
(4)名为“jdbc/ABCDataSource”的数据源线程池的范围是0-150,并且已经是群集,下有两个server,所以这个线程池数量是够用的了。
提问:
请问,针对该种线程池满而导致应用不能访问的情况,请问如何能够找出吞噬线程池的“元凶”?即如何把大量开销连接的类和方法找出来呢?
请大家参与讨论!特请懂看日志的高手不吝赐教!咔咔,谢谢~
收起