2012-07-12 99 views
-1

我正在Java 1.7中運行Tomcat 7.0.22服務器,並且遇到Tomcat在斷開管道異常後未釋放內存的問題。
問題背景:我正在使用firefox 10.0.5生成獲取請求,該請求使用Jersey進行處理,並使用hibernate查詢Oracle數據庫。然後將該查詢的結果分頁並使用JSONB以XML或JSON格式返回給編組對象中的使用者。
Tomcat 7在斷開管道異常後未釋放內存

要創建問題,我故意將頁面大小設置爲非常大的數字。根據Visual VM的說法,我的tomcat服務器使用分配給堆的1024m大約300m執行查詢。 Firefox在收到結果並最終重新啓動瀏覽器時最終會核心。查看catalina.out日誌會報告破損的管道異常。在監視堆大小並執行手動GC之後的幾個小時內,堆上的數據量永遠不會返回到執行查詢之前的狀態。

查看堆上的數據,使用visual vm,大的擊球手是一個Character數組,我相當確定是用XML構造的查詢的結果。此外,我注意到創建處理查詢的線程永遠不會終止。 我玩過session-timeout,沒有任何變化。 首先,有沒有人看到這個問題,是否有解決方案?

回答

0

這最終成爲一個休眠問題,需要清除存儲庫才能釋放所有查詢的對象。簡單地將它歸零或讓它超出範圍並不足以尊重這些對象。