【问题标题】:Session size in Java EE/Seam ApplicationJava EE/Seam 应用程序中的会话大小
【发布时间】:2011-01-02 21:42:31
【问题描述】:

我在使用基于 Jboss Seam 框架的 Web 应用程序时遇到了会话大小问题。我正在使用 MessAdmin 进行调查,它报告说,一旦用户登录,他们的会话大小就会从 50KB 跃升至 55MB(哎哟)。这似乎很疯狂,因为我在对话/会话范围内保留的对象很少。

MessAdmin 的输出很难确定原因。我希望对此工具有更多经验的人能够为我指明正确的方向。

这是输出:


(来源:locuslive.com


(来源:locuslive.com

【问题讨论】:

  • @Damo Hi Damo,设置 javax.faces.STATE_SAVING_METHOD 到客户端并再次查看您的日志
  • 谢谢,但这不会改变大小。我也尝试过压缩状态无济于事。请参阅下面有关此主题的旧版 Seam 论坛主题的评论。

标签: java jakarta-ee monitoring seam


【解决方案1】:

看起来很简单:该列表中有一些大小超过 50 MB 的对象,您需要删除这些对象。

您的应用程序对象(任务列表等)可能并不大,但如果其中任何一个包含对这些大对象之一的引用,它也会被拉入您的会话中。您需要用细齿梳检查您的应用程序对象,以清除对该打印输出中提到的任何对象的任何引用,特别是如果它们不是您的其他应用程序对象。将此类引用(字段)标记为 transient 而不是直接删除它们可能是可行的,但我不确定这是否会产生预期的效果。

只是为了让事情更清楚一点:MessAdmin 提到了一堆大对象,但其中一些可能是您的应用程序对象,并且它们本身并不是很大,如果不是因为它们访问其他不是app 对象并且很大。

【讨论】:

  • 感谢您的及时回复(以及有点吓人的头像 - “这里是约翰尼!”) - 抱歉,我需要扩展数据。请参阅新的 PNG。总会话大小约为 50MB,但有几个对象报告它们具有此大小。这与 Seam 对话有关,我没有任何接近这个大小的对象。
  • 我看到了!但我认为在那次会议中没有任何东西是你自己没有放在那里的(如果你愿意,你可以对此进行试验)。我的意思是(至少)您在会话中放置的一个对象引用了一些您不打算放入其中的非常大的对象。
  • EntityManager 和 AjaxStateHolder 看起来很可能会在您的对象中无充分理由地被引用。
  • 我已经运行了一些进一步的测试并确定它是 entityManager。在 Seam 论坛中查看结果:seamframework.org/Community/SeamAndHttpSessionSize。仍然不知道是什么原因造成的。
  • 唉,我对 Seam 的了解还不够,无法帮助您。对不起,祝你好运!
【解决方案2】:

可以在 [MessAdmin 文档][1] 中找到对共享对象的解释

[1]:http://messadmin.sourceforge.net/#[[HttpSession 大小]]

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    相关资源
    最近更新 更多