2011-06-29 65 views
0

我有一個由Tomcat 6提供服務的JSF應用程序,並且每個會話都可以在「會話」作用域中將它分配給它的viewScoped bean作爲託管bean。問題在於用來存儲這個bean的內存似乎並沒有被釋放,即使在會話在空閒狀態下花費了數小時之後。即使會話無效,管理的bean也不會被釋放

有沒有什麼方法可以強制Tomcat在會話空閒一段時間(例如說10分鐘)之後釋放此內存?如果沒有,如何通過編程方式手動釋放此內存?或者是「會話」作用域中「託管bean」的特性之一,它將在服務器關閉之前一直存儲在內存中,不管是什麼? 在此先感謝!

但viewScoped bean可能不會被釋放。因爲如果點擊過期頁面上的鏈接,tomcat控制檯中的日誌顯示服務器端的UIViewRoot仍然存在。日誌: beforePhase-RESTORE_VIEW 1周 afterPhase -RESTORE_VIEW 1周時間:3 beforePhase-RENDER_RESPONSE 6 而服務器進程的內存並沒有下降一點點。如果服務器運行時間較長。應用程序的響應如此緩慢,似乎不健壯,如分頁程序不起作用等等。 即使在服務器關閉時,控制檯打印輸出: 等待16例(縣)被釋放

是否有任何人知道這件事嗎?

+0

這不是JSF/PrimeFaces的責任。這是GC的責任。運行一個分析器。 – BalusC

回答

0

由於會話沒有超時,您的會話作用域託管的bean不會被釋放。您需要在部署描述符文件(web.xml)中指定會話的可接受超時值。以下示例在幾分鐘內。 10分鐘後,會話將失效,會話範圍的bean應該被銷燬。

<session-config> 
     <session-timeout>10</session-timeout> 
</session-config> 
+0

我知道這個參數,並且會話在X分鐘後也超時。您可以看到我編輯了我的答案。 – leo173

相關問題