我正在與大約300個併發用戶進行企業Web應用程序的性能調整。我從GC日誌中注意到,應用程序堆始終在增長,並且對象始終在完全GC之後累積。我已經獲得了生產堆轉儲,我很驚訝會話對象佔用了堆大小的90%以上!這都是因爲AjaxStateHolderObject。AJAX4JSF/AjaxStateHolder |會話內存泄漏
該應用程序在JSF 1.X和RichFaces 3.3.0上運行。
開始討論之前,我嘗試了以下內容:
- 下面的代碼添加到web.xml
<context-param>
<param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>
<param-value>1</param-value>
</context-param>
- 添加以下代碼到web.xml
<context-param>
<param-name>com.sun.faces.numberOfViewsInSession</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.numberOfLogicalViews</param-name>
<param-value>1</param-value>
</context-param>
- 從RichFaces的升級3.3.0至3.3.3
所有上述的嘗試未能解決MEM泄漏問題。
更新
*單個用戶會話可以消耗高達由於AjaxStateHolder規模龐大的25 MB。
*應用程序的大多數託管bean都是請求範圍,會話中沒有未使用的引用對象,關於內存的唯一問題是ajaxStateHolder。
在此先感謝您的任何指導。
任何形式的幫助,將不勝感激,因爲我沒有在網絡上發現任何有關這個問題。
你真的沒有給我們足夠的細節來幫助你。會話可能會很大,但也許這是因爲您的應用服務器正在爲3k個併發用戶提供服務,這是一個很大的問題。單個用戶會話通常消耗多少內存?對象是否存儲在會話中,實際上可能是無狀態的?你是否可以利用視圖作用域來管理一些被管理的bean,以將有狀態範圍限制爲單個頁面?他們未使用的對象是否在不再被讀取或使用的會話託管bean中引用?簡單的配置調整可能在這裏沒有什麼不同。 –
@maple_shaft對不起,只有300個用戶。 :)單個用戶會話最多可以使用25 MB。大多數託管的bean都是請求範圍。會話中沒有未使用的引用對象,關於內存的唯一問題是ajaxStateHolder。 –
任何更新? –