天天看點

dbcp連接配接池不合理的鎖導緻連接配接耗盡

應用報錯,表象來看是連接配接池爆滿了。

應用堆棧,幾十條線程都阻塞到dbcp池的PoolableConnectionFactory.makeObject方法了,此方法在等待0x0000000709a638a0對象鎖,但0x0000000709a638a0對象一直被其中一條線程執行PoolableConnectionFactory.makeObject時鎖了,而且這條線程擷取到鎖後還阻塞住了,是以導緻後面幾十條線程都BLOCKED了。

可以看到其實擷取鎖的線程是阻塞在這裡了,做mysql握手包的時候一直在等待讀,阻塞在網絡IO了。

這個是dbcp1.x版本在建立新的連接配接對象時會把整個連接配接工廠類對象鎖了,一旦建立過程中發生阻塞就會導緻整個池都死掉。這個問題很大。

解決方案,更新dbcp2.x版本或tomcat jdbc或druid連接配接池,推薦druid連接配接池,功能強大自帶監控。

========廣告時間========

<a href="http://blog.csdn.net/wangyangzhizhou/article/details/74080321">為什麼寫《Tomcat核心設計剖析》</a>

=========================

歡迎關注:

dbcp連接配接池不合理的鎖導緻連接配接耗盡