gpt4 book ai didi

java - JSF调优

转载 作者:搜寻专家 更新时间:2023-10-30 21:15:13 26 4
gpt4 key购买 nike

遇到 JSF 填满我们的 session 的问题。前几天我们发生了系统崩溃。将 Heap 发送给 IBM 进行审查,发现我们有一些 session 大到 50M。他们在 session 中发现了 JSF 组件,其中一些组件非常大。

那么,有什么可以调优的吗?配置项要看什么?或者其他方向。

我们的系统是使用 JSF 和 Spring 构建的表示层,后端是 EJB、Spring 和 Hibernate,它们都在 WebSphere 6.1 上运行。

最佳答案

JSF 是一项有用的技术,但您肯定会用它来吊死自己。

这听起来像是,要么扩大 View 状态的大小(通过在组件上设置较大的值),要么将对组件的引用泄漏到其他 session 状态(这很糟糕)。另一个潜在的罪魁祸首是 View 过大(我已经看到人们可以轻松构建 UI 树导致非常大的控制图和到处都是数据表)。我知道 IBM 提供富文本和电子表格控件 - 我无法评论使用这些控件会对状态大小产生什么影响。

最简单的方法是检查在 faces-config.xml 中为 session 范围配置的托管 beans。

JSF 在请求之间保存两件事:

  • View (页面上的所有控件)
  • View 状态(控件的状态)

这些是分开的,因为一些控件,例如数据表的子控件,可以有多个状态(每行一个)。状态可以保存到表单上的隐藏字段(如果未加密,可能是一个很大的安全隐患)或 session 中。为了适应共享同一 session 的多个浏览器窗口(并且在某些实现中支持后退按钮),存储了多个 View 。

  • 应该有一个配置选项来设置应用在任何给定时间为给定用户在 session 中保留的 View 状态数。
  • 您可以通过提供 StateManager 来测量 View 状态的大小测量保存的 View /状态的大小(在 faces-config.xml 中配置一个 StateManager,使用一个带有 StateManager 的公共(public)构造函数 - 有关详细信息,请参阅 JSF spec PDF;状态是可序列化的,您可以通过以下方式检查其大小将其转储到流中)。

大多数 IDE 构建的 JSF 应用程序都有支持 bean。有可能通过 session bean 范围保持状态的时间比您想要的更长,从而给 session 带来压力。由于每页往往有一个支持 bean,因此页面越多,问题就越大。检查您的 faces-config.xml 以查看这是否是潜在的问题来源。

您可以做的其他事情是配置 HttpSessionAttributeListener在您的 web.xml 中。你可以获得stack trace帮助识别您应用中的问题区域。

关于java - JSF调优,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com