Fork me on GitHub

Programming Design Notes

JSF + RichFaces 做成 Session Memory Leak

| Comments

在公司有個項目是使用 JSF 作為 View,感覺十分差。JSF 給我的感覺: 運行慢,吃資源,限制又多。實在不太喜歡 JSF

在進行 Street Test 時,發覺 Server 上的 Memory 用得異常地多。經調查後發現 RichFaces 其中一個 Object - AjaxStateHolder 佔用大量 Memory。如果是使用 3.2.0.SR1 之前的版本更加嚴重,Session 隨時佔用 1 GigabytesMemory

解決方法就是在 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>

因為每運行一次 JSFView 時都會將這個 View 放到 Session 內,而且同一個 View 亦會再儲存多一次在 Session,因為這些 Session 仍然在使用中,JVM GC 無法將不用的 View 回收,做成 Memory 使用量不斷增加。

限制 View 數量後就可以解決這個問題。

RichFaces bug: https://issues.jboss.org/browse/RF-3878

相關書籍: Core JavaServer Faces (3rd Edition)JavaServer Faces 2.0, The Complete ReferenceBeginning JSP, JSF and Tomcat Web Development: From Novice to Professional