Glassfish

如何最好地調試 Glassfish v2 上的 JDBC 連接洩漏?

  • June 21, 2013

有人對在 GlassFish 上調試連接洩漏有什麼好的建議嗎?

我目前正在調試一個 GlassFish 伺服器,該伺服器包含一個偶爾出現記憶體洩漏的應用程序,最終導致不得不重新啟動伺服器以釋放池(我被告知,池清除僅在 Glassfish 3 中可用)。

當我今天調試這些類型的錯誤時,我會查看伺服器日誌,當我看到我們的監控報告池已經增長時,看看是否有任何有趣的錯誤或類似的錯誤。

有沒有人有更好的方法來調試這些問題?

所有的應用程序都是 EJB/EAR 的,它們使用註解來注入數據源。然後應用程序使用數據源獲取連接。當然,每個連接都應該由程序員關閉,但我想有人在這裡的一個案例中忘記了它。

我認為跟踪記憶體洩漏的一個好方法是將 VisualVM 附加到正在執行的 Java 程序(在本例中為 GF 實例)並查看堆轉儲的參考樹。

我想到的另一種方法,但需要一些工作,是編寫自己的連接/連接池包裝器,並在每次從池中獲取連接以及關閉連接時記錄堆棧跟踪。

您可以為連接池設置“連接洩漏回收”選項,並且可以在伺服器日誌中獲得指示根本原因的完整堆棧跟踪。

請參閱文件頁面 - http://docs.oracle.com/cd/E19879-01/820-4335/geveg/index.html

引用自:https://serverfault.com/questions/304909