2012-06-25 71 views
0

我有一个运行在Tomcat 7上的Java web应用程序,它使用JDBC连接到Oracle 11g数据库。该应用程序包含一个JSP,它使用JQuery向一个将数据插入数据库的servlet发出Ajax请求(使用.post函数)。当系统负载很轻时,我开始看到数据库中的空闲连接。我通过在SQL Developer中检查v $ session来观察它们。当我们运行性能测试时,它在大约2分钟内用150个连接最大化了数据库服务器。我多次访问过我的代码,并且始终关闭所有ResultSets,Statements和Connections中的finally代码块。当JSP同时提交多个Ajax请求时,问题就出现了,这让我认为这可能是一个多线程问题,但是,我一直在关注我的代码,并且没有跨线程共享数据。从数据源获取连接并关闭连接的代码位于所有DAO类继承的抽象基类中。有没有人有任何想法可能会导致这种情况?由于涉及很多类,我不确定要发布什么源代码;让我知道如果你想看到任何。谢谢你的帮助。为什么关闭它们后JDBC连接保持打开状态?

+0

什么是您的连接池设置? – Olaf

+1

你有使用连接池(DBCP)吗? –

+0

这是在Tomcat中的server.xml:logAbandoned = “真” maxActive = “50” 了maxidle = “2” MAXWAIT = “ - 1” removeAbandoned = “真” removeAbandonedTimeout = “10” – jg8273

回答

0

尝试将maxWait设置为10000并观察超时。这将表明您的Web应用程序的某些组件未关闭数据库连接。

另外,试着限制maxActive到15,看看它是如何影响你的应用程序和Oracle中同时打开的连接数的。

+0

实际上,我们最终将maxWait设置为-1,将maxIdle设置为2,这似乎解决了问题。当系统负载很重时,它确实创建了额外的连接,但它们很快就会消失。 – jg8273

相关问题