druid擷取連線逾時異常排查

來源:互聯網
上載者:User
1 現象com.alibaba.druid.pool.GetConnectionTimeoutException: loopWaitCount 0, wait millis 60011        
at com.alibaba.druid.pool.DruidDataSource.pollLast(DruidDataSource.java:1068)        
at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:748)        
at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:640)        
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:624)        
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:614)        
at cn.egame.common.data.dbpool.ConnectionManager.getConnection(ConnectionManager.java:33)        
at cn.egame.common.data.BaseDao.getConnection(BaseDao.java:142)        
at cn.egame.common.data.BaseDao.getObject(BaseDao.java:462)        
at cn.egame.common.data.BaseDao.getInt(BaseDao.java:233)        
at cn.egame.core.gc.TerminalServiceDao.getTerminalIdByUACode(TerminalServiceDao.java:30)        
at java.security.AccessController.doPrivileged(Native Method)        
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)        
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)        
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)        
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)        
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)        
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)        
at java.lang.Thread.run(Thread.java:662)
根據GetConnectionTimeoutException此異常,初步懷疑:(1) mysql串連不上,排查通mysql過mysql用戶端能夠串連上mysql,
且mysql的串連數並未被佔滿。
(2)串連泄露2 分析    System.out.println("pool dump : " + pool.dump());
//pool是DruidDataSource列印資訊:pool dump :{        CreateTime:"2013-06-08 19:23:38",        ActiveCount:200,        PoolingCount:0,
CreateCount:319,        DestroyCount:119,        CloseCount:201403,        ConnectCount:213737,        Connections:[        ]}
ActiveCount:當前被佔用的串連數,設定檔中MaxActive=200,最大串連數設定為200。PoolingCount:閑置的串連數。結論:druid串連泄露。
3 排查pool.setRemoveAbandoned(true);//會影響效能,只有在排查串連泄露的時候,才開啟    System.out.println("activeStackTrace : "+
pool.getActiveConnectionStackTrace());//pool.setRemoveAbandoned(true)設定為true的時候,才有活躍串連的堆棧資訊,
不然後沒有列印資訊:activeStackTrace : [java.lang.Thread.getStackTrace(Thread.java:1436)com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:678)
com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:624)
com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:614)
cn.egame.common.data.dbpool.ConnectionManager.getConnection(ConnectionManager.java:35)
cn.egame.common.data.BaseDao.getConnection(BaseDao.java:142)cn.egame.common.data.BaseDao.main(BaseDao.java:33),
java.lang.Thread.getStackTrace(Thread.java:1436)com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:678)
com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:624)
com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:614)
cn.egame.common.data.dbpool.ConnectionManager.getConnection(ConnectionManager.java:35)
cn.egame.common.data.BaseDao.getConnection(BaseDao.java:142)cn.egame.common.data.BaseDao.main(BaseDao.java:34)]     
我們就可以根據活躍串連的堆棧資訊,看到具體的哪個業務方法持有了串連未釋放。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.