近日在接口服务器与app客户端的测试中,发现一个操作只要连接点击几次,就会发生app不能再访问接口的问题,根据如下思路查询问题:
1.使用pl/sql登录oracle,能执行正常的DML操作,说明数据库正常。
2.访问接口服务器首页,能显示欢迎页,而且app的请求后台能够收到,只是无消息响应,说明接口服务器所在的tomcat是能正常提供服务的。
3.tomcat重新启动之后,app接口能够正常访问,重复导致问题的操作,同时查询数据库该接口服务器的连接:
select b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE , b.PROGRAM order by count(*) desc;
发现每次点击该操作,来自于该应用服务器的连接就增加一次,而此接口服务器使用的是jdbc连接池,最大连接数配置为10个连接,果然当连接数达到10时,app便不能再访问数据库,因为已经无法再获得有用的连接。
综上说明,接口服务器中,该操作的数据库连接没有释放,查询后台代码,果然try语句块没有使用finally对获取后的连接进行释放,为此,添加finally以及连接释放代码,重新部署启动,再次点击之前APP上导致不能访问的操作,查看连接数,发现连接数没有再增加,一直保持初始连接数,至此,问题解决。