Topic: 如何察看未释放的连接

  Print this page

1.如何察看未释放的连接 Copy to clipboard
Posted by: hcucu
Posted on: 2002-11-19 14:30

开发平台:IBM AIX + websphere4.0 + oracle8i (+ jsp,servlet....)

由于是合作项目,在同一平台下还跑着别人做的很多东西,现在出现一个问题: 不知道是谁用了数据库连接没释放掉(也有可能是由于程序出错,连接没被正常关闭),结果用了很长一段时间后,连接数达到最大值,再也取不到连接了,必须重启服务器。

合作者坚持说是我没有关闭连接,我心有不服,想请大家出个主意:
1. 如何察看连接到oracle,或websphere的数据库连接是从哪个程序连过来的?由于程序统一使用的是websphere的连接池,所以oracle的DBA studio里只能察看到websphere到oracle的连接。如果能查到未释放的连接不是我的程序的,那我就清白了
2. 万一确实是我的程序的错误,有什么工具或办法让我比较容易的定位到程序错误的地方,难道只能一行一行代码检查?跟踪调试比较困难,因为我这边无法模拟用户的环境,而且要用一两个月才会出这样的问题,我真不知道怎么去查了。

另外,我的程序一般是这样的:

try{
  // 数据库的操作
}catch(Exception e){
  // rollback 或 ...
}finally{
  // 关闭resultset, statement, connection
}

先谢谢各位!

2.回复: 如何察看未释放的连接 [Re: hcucu] Copy to clipboard
Posted by: palatum
Posted on: 2002-11-19 19:16

IBM Webspere自身不提供吗?Question

3.回复: 如何察看未释放的连接 [Re: hcucu] Copy to clipboard
Posted by: hcucu
Posted on: 2002-11-22 15:40

有没有工具或设置,使得可以强行关闭oracle中或websphere中n久没有用到的连接

4.回复: 如何察看未释放的连接 [Re: hcucu] Copy to clipboard
Posted by: 九佰
Posted on: 2002-11-22 18:22

使用SQL Plus 用system/manager 连接oracle数据库

SQL>select countStart,machine from v$session group by machine;

  COUNTStart MACHINE
---------- ----------------------------------------------------------------
         8 webserver
         1 client100

machine:显示连接到数据库的机器名称
count:显示的是相应机器的连接数

5.回复: 如何察看未释放的连接 [Re: hcucu] Copy to clipboard
Posted by: 九佰
Posted on: 2002-11-22 19:12

我们也遇到过这个问题。

一种方法是:在自己机器上运行自己的程序。
                   每个人机器上都安装Web Server 然后运行自己的程序,
                    然后查看机器的连接数;
另一种方法:一个人操作,每操作一次就检查一下数据库的连接。

6.Re:回复: 如何察看未释放的连接 [Re: 九佰] Copy to clipboard
Posted by: hcucu
Posted on: 2002-11-28 22:16

九佰 wrote:
我们也遇到过这个问题。

一种方法是:在自己机器上运行自己的程序。
                   每个人机器上都安装Web Server 然后运行自己的程序,
                    然后查看机器的连接数;
另一种方法:一个人操作,每操作一次就检查一下数据库的连接。


先谢谢各位的回复

我想用一些工具(比如ms application center test)模拟多用户连入,与您提到的方法类似。但是实际是用户要用很久才会出现connection到达max的情况,也就是说在正常的流程和一般的错误流程中是不会出现的。我怀疑是有重大错误发生以至于连finally块中的close()都没有被执行到,但是有这么大的错误,程序也该垮掉了。

奇怪,好些天用户没发email过来骂我了 :)

7.呵呵~~驰鞍思坠,本着对客户负责的原则,还是要解决问题的 [Re: hcucu] Copy to clipboard
Posted by: 九佰
Posted on: 2002-11-29 10:16


8.我是这么做的,仅供参考。 [Re: hcucu] Copy to clipboard
Posted by: maximus
Posted on: 2002-12-05 18:49

方法1:
新建连接时以向一个static 的vector中插入一个对象(这个对象包括你建连接的地点。等相关信息)
关闭连接时从这个vector中删除该对象。

然后判断。如果该vector中的对象大于一定数值。则认为有未关闭的连接。然后你把这些对象计为log。根据log你可以判断在那里有未关闭的连接。
(这个对象最简单就是Connection.ToString())
适合在自己的程序中查错。

方法2:
修改jdbc驱动。一个连接常时间不用,也会认为是垃圾。这时会回收。在fina
中记载一下情况。不过记载的是该连接最后执行的SQL语句。根据sql语句判断是谁的程序出的错。
适合在多人协作的项目中查错。

9.when you config your connection pool, [Re: hcucu] Copy to clipboard
Posted by: fredfred
Posted on: 2002-12-10 05:44

there is a option which is 'idl time out' that means the system will close the connection after the time that you have set.But this is just the temperory solution for you problem.

10.Re:如何察看未释放的连接 [Re: hcucu] Copy to clipboard
Posted by: rox
Posted on: 2002-12-19 11:31

Orion!

Move your codes to orion,
and start it like this:
java -jar -Djdbc.connection.debug=true orion.jar -console

it will warning you in the dos command window if you have not any connection closed!

11.Connection object [Re: hcucu] Copy to clipboard
Posted by: snowbug
Posted on: 2002-12-19 23:40

Do you have a connection pool? If so, here is an easy way to exam the problem (we did this before and it worked great to nail down the error in the code):

Create your own MyConnection class that wraps the real connection object. In the pool's getConnection() method, return this MyConnection object and attach the stack trace information to it(create an Exception object and retrieve its stack trace as String, save in the MyConnection object).
When the connections is maxed out, check each of the open connections and print its stack trace, which tells you exactly which code borrowed the connection.

Make sure to disable it after you fix the problem. Create stack trace is an expensive operation.


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923