运行到了一个问题,JSF的是填补我们的会议。我们有一个系统会崩溃的一天。发送堆IBM审查和发现,我们有一些会议大至50分钟。他们发现了JSF组在本届会议和一些非常大。

那么,是否有任何调整,可以做什么?配置项目来看?或其他的方向。

我们的系统是建立一个使用JSF和春季为表示层,后端是EJB、弹簧和休眠所有上运行的WebSphere6.1.

有帮助吗?

解决方案

JSF是一个有用的技术,但是当然,你可以挂自己。

这听起来就像,你是膨胀的尺寸视状态(通过设置较大的数值组成的)或者你在泄漏的引用部分纳入其他会议的国家(这将是坏).另一个潜在的罪魁祸首将会过大的看法(我看见了易于与其人民可以建立UI树木导致非常大的控制的图表数据表处).我知道,IBM提供了丰富的文本和电子表格的控制-我不能评论用什么效果这些将对国家大小。

低挂果是要检查管理豆构成为会议的范围 faces-config.xml.

JSF存的两件事之间的请求:

  • 图(所有的控制页)
  • 视状态(国家的控制)

这些都是分离的,因为一些控制,例如儿童的数据表,可以有多个国家(每个行)。国家可以保存到一个隐藏的场上的形式(如果未加密的,可能是一个很大的安全危险),或在本届会议。为了容纳多个浏览器窗户分享同一届会议(和在某些实现,返回键的支持)、多景的保存。

  • 应该有一个配置的选择来设定的数量视国家的应用程序将保留在该届会议对于给定用户在任一给定时间。
  • 你可以衡量的尺寸看,国家通过提供一个 StateManager 这一措施的大小保存的查/国家(配置StateManager在faces-config.xml 与公共构造,需要一个StateManager-看到 JSF规范 Pdf更多的细节;国家序列化的,你可以检查,其大小倾销到一个流)。

最IDE建JSF的应用程序已经背豆。这将是可能的,通过会议豆范围内举行国家间比你想要的,放置一个应变的会议。由于存在趋向于将一种背豆每页,更多的页你有,更大的问题会。检查你的 faces-config.xml 看到如果这是一个潜在来源的问题。

别的东西,你可以做将配置 HttpSessionAttributeListener 在你 web.xml.你可以得到一个 堆栈 来帮助识别问题领域中的应用。

其他提示

这是我听说过的第二个因JSF和过多的对象创建而死的系统。另一个也在后端使用了Spring和Hibernate。使用OptimizeIt进行性能分析显示所有请求的后端响应都在毫秒级别,但是您可以使用秒表再次使用浏览器进行渲染,因为它需要很长时间 - 30秒到几分钟。客户消耗的内存很荒谬。

我只是一名观察员,而不是该项目团队的成员。我将不得不问这个问题是否得到解决,如果是的话,解决方案可能是什么。

但如果两点成为趋势,我会说JSF可能存在致命缺陷。就个人而言,我完全远离它。

为什么不试试Spring网络前端,看看是否有帮助?如果你遵循Spring惯用法,那么用基于JSTL的JSP和Spring控制器替换JSF应该是一个相对简单的事情。

我正在研究一个JSF项目,发现我们有一个错误,我们添加了多个JSF h:表单元素。导致每个表单都包含整个视图状态的副本。每页减少1个表格,使页面从~2M减少到~300K。

您可能遇到了许多支持bean作为会话范围的问题。

您可以尝试查看 MyFaces Orchestra 。这是一个提供会话范围的库,因此一旦用户完成了一组特定的bean,它们就会从会话中删除。

我知道Spring WebFlow有类似的功能,但我还没有真正研究过它!

JSF将视图存储在会话中以支持其基于丰富组件的体系结构 (需要保持其视图状态)并且如果使用不当可能会填满堆。如果您没有大量的工作流程,那么每次会话总是会有很少的观看次数。还要尽可能避免在会话中保持后备。使用自定义标记使数据对象仅用于下一个请求周期。我们还可以将Spring Web Flow与JSF一起使用,如果我们在应用程序中有很长的工作流来减少会话中配置的视图的数量,那么它会引入视图范围和流程范围。 JSF可以用于轻松创建丰富的用户界面,这有助于构建类似于桌面应用程序的Web应用程序。将特定堆分配给JSF框架以完成其工作。但是在应用程序端有效地使用内存并确保没有内存泄漏。在开发过程中需要调查和纠正所有内存泄漏。 Aways使用分析器来查找应用程序中存在的内存泄漏和性能瓶颈。

垫。

如果您使用的是MyFaces <!> lt; 1.1.6在会话中缓存旧的序列化视图的方式存在巨大的内存泄漏,从而不会让它们被释放,以便它们可以被垃圾收集。我遇到了严重的问题,也有50Mb的会话。 MyFaces的快速升级可以毫无问题地解决问题。

将会话持久性配置为数据库,它将使用最少使用的算法将最少使用的会话推送到内存中。它具有高性能(如果配置正确),将有助于您具体而快速。

有点古老的话题,但最近遇到了这个问题。通常,存储视图和视图状态(如前所述),并填充会话以允许后退按钮工作。有一些参数可以在需要设置的部署描述符(web.xml)中对此进行排序。

某些库的多个实例可能需要多个参数设置,例如使用MyFaces和JSF RI时。 默认情况下,它们可以设置为一些相当高的值(我相信分别为20和16)。这意味着您可以使用20倍于会话的空间(部分?)。

生产环境的JSF调整技巧:
  - 图像,CSS和JavaScript资源的使用应由标准HTML标记(img,link,script)而非服务器端完成,并确保在网址前设置#{request.contextPath}以避免相对路径问题。
  - 使用(menu,header,footer)
缓存页面的静态部分omnifaces cache   - 将refresh-period变量设置为-1
  - 将project-stage设置为Production
  - 查看代码过滤器(如果有)

另外,检查我的文章<!>“ Java Server面对现实生活中的应用 <!> quot;在DZone上,它将为您提供有关JSF在开发,测试和生产环境中的全貌。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top