异常:com.alibaba.druid.pool.GetConnectionTimeoutException

背景

今天访问服务器的认证模块,发现无法访问,应该是出现问题了,看下服务器的输出日志,发现了一些蛛丝马迹。

经过

ssh上去之后,使用vim 打开tomcat/logs/catalina.out 发现了一些东西,
异常:com.alibaba.druid.pool.GetConnectionTimeoutException_第1张图片

异常发生的前提是提交了很多次的表单,数了一下正好10个,记得前段时间修改了一下druid的初始化大小,正好也是10个,会不会有什么关联呢?

异常:com.alibaba.druid.pool.GetConnectionTimeoutException_第2张图片

首先声明,绝对不是connection未释放,导致的连接池被泄露,因为代码已经检查过并且验证过了很多遍

还是来分析分析我的思路是这样的:
正常的流程应该是提交表单后,应该就是交给DAO去操作数据库了,此时就应该打开数据库连接然后执行SQL语句等等之类的东西,
但是假如此时提交的表单并不完整,所以此时并未打开数据库连接,进而也就无法执行SQL语句之类的,这就意味着会抛出异常,但是我在代码中使用的逻辑代码是try catch finally ,我的释放都写在finally了,突然有点明白了,估计是执行了10次finally中 的释放connection ,因为初始化后数据库连接池就是10,然后被执行了10次finally后导致druid中的连接被耗尽,导致抛出了异常。。
也就是题目中的:

异常:com.alibaba.druid.pool.GetConnectionTimeoutException

小结

通过本次的异常探究,发现抛出异常肯定是某个不知名的地方出现了问题,而这种问题最好的排查手段就是模拟一遍正常情况,然后再逐步的检查可能会出现的任何问题,直到发现最终的BUG!

你可能感兴趣的:(Java)