问题:在使用weblogic 连接池时,系统经常出现没有断开的连接,但因为系统庞大,又不能知道哪个地方程序没有断连接.请问有没有好办法能够监测到没有断开连接的SQL,或其他监测办法
解决方案:
1、查源代码。像Oracle这样的数据库做归档日志的话貌似能知道执行的什么SQL,通过综合观察,分析。
2、Oracle能根据进程查到SQL,怎么能在weblogic中查到没断连接的事物所执行的sql呢
WebLogic能知道活动的连接数,Oracle的企业管理器能看到会话关联的SQL
3、使用kill -3 pid
或者通过console 的dump看看进程信息
这个情况下哪些进程在做什么东西,应该可以追踪到具体方法,然后定位相关SQL操作即可
4、把weblogic的jdbc日志打开,在控制台把检测连接池泄露的选项打开,之后可以查看weblogic console日志和jdbc日志,能找到泄漏点。
另一个方法是在oracle上,好像也能查到,具体方法不记得了。
5、查看weblogic后台日志,一般连接池泄露会有如下提示:A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool.找到日志后可以使用关键字来匹配,如用leak匹配,这样就可以找到未关链接的程序。也可以写个脚本,放在weblogic服务器上,定期扫描一下日志,如果发现泄露就抛出相关错误信息