如何找出一个忘记关闭数据库连接的JSP?

keeper21 2009-03-04 03:41:36
我们有一个内部应用系统,由厂商开发完毕后交给我们维护了。tomcat+jsp+oracle。现在时不时(频率不一定,有时1周出现2次,有时2周出不了一次)在登陆时出现错误页,如下。
从错误信息上看好像是数据库连接池满了,但实际上连接数已经配到了1000,平时同时在线人数大概在50左右。厂商初步分析是某个页面的连接忘了写关闭连接的语句,但苦于页面太多,也不好一个个查。

想请教各位高手,对于这种问题,有没有思路来准确定位这个有问题的页面?




HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot get a connection, pool exhausted; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
com.bjdv.zwcc.struts.action.CcActionServlet.process(CcActionServlet.java:44)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
...全文
70 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yadg 2009-03-04
jsp里有创建数据库连接,现在都过时了,假如jsp报错,你的连接就关不了了。
你们软件该更新了,jsp里最好不要出现创建连接的。
假如你们是从连接池获取链接的,那改下连接池,过段时间,就自动关闭连接,你就不用改那些jsp了
回复
javagxc 2009-03-04
1喽说的好,支持,这样是最好的啦
回复
loveunittesting 2009-03-04
只能用数据库客户端软件,监控一下连接数,如果某一个操作连接数增加太多,就说明没关闭,别人编的只能这样了
回复
jabeginner 2009-03-04
这个就有点困难啦,像这种读数据库方面的事应该到独立的类中进行的啊,怎么你每个页面都加上这些语句吗?
你可以试试全局搜索,就是找到没有关闭连接的那条语句,比如:
有关闭语句的:
a b c;
关闭语句;
d e f ;

没有关闭语句的:
a b c;
d e f;

你就搜索一下:a b c;d e f;看能不能有结果
回复
Jacky_Zhu_1983 2009-03-04
那不要查了。..所以地方都再调用一次关闭
finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}

}
回复
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2009-03-04 03:41
社区公告
暂无公告