日志报数据源连接池满如何查因?

问题描述:    (1)应用首页能轻松打开,但登陆的时候(与数据库打交道)迟迟没有响应!    (2)此时,杀几个javacore,并从javacore中可以看出大部分线程来到数据源连接的请求时,就止步了:    "Servlet.Engine.Transports : 24501" (TID:0x78E86030, sys_threa...显示全部
问题描述:

    (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,所以这个线程池数量是够用的了。

提问:
    请问,针对该种线程池满而导致应用不能访问的情况,请问如何能够找出吞噬线程池的“元凶”?即如何把大量开销连接的类和方法找出来呢?

    请大家参与讨论!特请懂看日志的高手不吝赐教!咔咔,谢谢~收起
参与13

查看其它 11 个回答hrdede的回答

hrdedehrdede软件开发工程师信城通数码科技
1、是数据库连接池使用满了,临时的解决方案是增加数据库连接池的大小。

2、对应用服务器开通trace功能,跟踪线程在做什么?

3、通知程序员,看是否有未关闭的连接。另外可以通过tovili软件检查当前数据库连接的数、回收的连接数、等待连接的数等信息
互联网服务 · 2009-02-11
浏览1686

回答者

hrdede
软件开发工程师信城通数码科技
擅长领域: 中间件应用服务器双活

hrdede 最近回答过的问题

回答状态

  • 发布时间:2009-02-11
  • 关注会员:1 人
  • 回答浏览:1686
  • X社区推广