首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

利用JavaMelody解决连接池不释放的有关问题

2013-11-08 
利用JavaMelody解决连接池不释放的问题公司新项目上线,需要从老数据库中定时同步部分数据到新数据库中,写

利用JavaMelody解决连接池不释放的问题
公司新项目上线,需要从老数据库中定时同步部分数据到新数据库中,写了一个调度程序来做。

运行一段时间后发现,调度程序的连接池一直在不停增长,大概8个小时能增加600-800个连接,等到连接数量达到连接上设置的上限后,程序就开始一直等待不工作了。

刚开始以为是连接池配置问题,调了好几个方案,问题没有解决,就怀疑到了是代码里事务的问题,这下就不好办了,因为项目中混合使用了hibernate和jdbcTemplate,而且方法也不少,具体定位很麻烦(本人巨懒)。

刚好前几天在新项目中用了JavaMelody监控性能,那就还试试用这个工具来找原因吧.

JavaMelody的安装方法另一个文章了已经写了,http://henghengdh.iteye.com/blog/1967755,但是想要监控到jdbc连接,还要单独配置下连接池。

因为调度程序同时使用了hibernate和jdbcTemplate,那么另一篇文章里的单纯hibernate配置就不管用了,需要配置jndi的方式。
第一步,在tomcat的server.xml中,在GlobalNamingResources标签中添加jndi数据源。


第二步,将配置的数据源放入tomcat的context.xml中,以供tomcat全局调用。在context节点中,添加

第三步,在项目的spring配置文件中,引入jndi数据源。
在applicationContext.xml中添加

最后,将c3p0和sql2005的jar包放入tomcat的lib文件夹里(用其他连接池和数据库的放对应的jar包),然后按照http://henghengdh.iteye.com/blog/1967755的JavaMelody安装方法把JavaMelody加入项目中。

到这里,项目和JavaMelody已经配置好了,启动项目,在JavaMelody监控台里添加项目地址就能看到项目的运行状态了。


如上图被使用的jdbc连接数,最高达到了311,因为调度程序基本不会有并发的情况,所以我给调度程序设置的连接上线是50个,这肯定就是有连接没有释放了,然后往下看系统信息这里


点击红圈圈住的地方,出现下图


这里就是所有正在使用的连接了,鼠标放到时间出,可以看到详细信息,如下图


红圈处定位到了具体的类和方法,剩下的问题就好说了,改方法就是了。

最后的方法问题。。。。不想说了。。。n+1次的倒在了opensession()和getCurrentSession()前面。。。

修改完方法后重启项目,再进入“被打开的JDBC连接数”页面,如下图


至此问题解决。

转载请注明来源。

热点排行