2012-06-25 104 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

相關問題