問題:在使用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服務器上,定期掃描一下日志,如果發現泄露就拋出相關錯誤信息