【问题标题】:WebSphere HttpSession not getting invalidatedWebSphere HttpSession 没有失效
【发布时间】:2013-12-12 15:35:57
【问题描述】:

似乎实时 http 会话数以千计,出于某种原因,似乎 session.invalidate 没有清除会话,或者“低优先级”线程没有声明非活动会话。

请查看实时 http 会话 cout 的输出。

TIMESTAMP       Server      WAR FILE        Live Count
=========       ======      ========        ==========
2013-12-10_00:00    cib_bz_1    WD#K1.war           5253

在我们的注销 servlet 中,我们确实调用了 session.invalidate,但似乎 http 会话仍然存在并且没有被清除。

所以我想知道:

  • 什么会导致 session.invalidate() 不使会话无效?如果其他一些线程引用了同一个会话,它是否可能不会失效?

  • 什么会导致在 Websphere 中运行的低优先级线程不使 http 会话无效和删除?

非常感谢您的建议。

谢谢

【问题讨论】:

  • Tivoli PMI 统计信息是否可能不正确并且没有考虑已失效的会话?

标签: java http session websphere


【解决方案1】:

也许您的代码在注销期间使用“request.getSession(true)”创建了一个新会话,或者您有某种带有以下行的 .jsp:

<% @page session="true" %>

如果没有现有的 Http 会话,这将创建一个新的 Http 会话。这是不需要的会话的“典型原因”之一。

要查找问题,请启用会话跟踪。应用以下跟踪字符串: com.ibm.ws.session.=all:com.ibm.ws.webcontainer=all:com.ibm.wsspi.webcontainer*=all

【讨论】:

  • 您好罗伯特,感谢您的回复。让我们假设是这种情况,但是如果创建了不需要的会话,那么它们仍然会在某个时候超时并且应该由 WebSphere 重新声明,不是吗?似乎计数达到了 30,000,一旦重新启动,它就会恢复到正常的 100-150 左右,并且每天持续增加近 1000 左右。我们进行了堆分析,看到堆中有 1000 个会话,但其中大多数显示 isValid=false,这意味着它已失效,并且属性名称和属性值为空。
  • 好的,那么您必须进行堆转储并分析 GC 根路径并尝试找出哪些对象是引用者,即保持会话在堆上保持“活动”状态。
【解决方案2】:

发现这是 WebSphere PMI stat 中的一个错误

【讨论】:

猜你喜欢
  • 2012-08-29
  • 2011-10-06
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2018-08-30
  • 2015-10-30
相关资源
最近更新 更多