2

我有一个应用程序以适当的速度泄漏 Java 堆(400 个用户在 2 小时后留下 25% 的空闲空间……注销后所有内存都恢复了),我们已经将导致内存泄漏的项目确定为放置在会话中的字符串似乎是由 Portal 本身生成的。这些值是编码的门户 URI(非常长的结束编码字符串......通常大小约为 19kb),而键似乎是七 (7) 个随机生成的字符,前缀为RES#(例如,RES#NhhEY37)。

我们已经使用会话跟踪和捕捉 heapdump 逐步完成了应用程序,这导致确定几乎每个页面上都有这些对象中的一个被创建并添加到会话中……事实上,似乎每个页面上都有提交数据(这是大多数页面)。因此,通常是 1:1 的页面,或者 1:1 的表单。

有没有人遇到过类似的问题?我们正在向 IBM 开票,但也想询问这个社区。提前致谢!

4

3 回答 3

1

它可以是portlet 缓存吗?您可以激活 servlet 缓存并声明较长的 portlet 到期时间。引用技术期刊

Portlet 可以通过在它们的 portlet.xml 描述符中设置它们的到期时间来宣传它们在片段缓存中缓存的能力(请参阅 Portlet 描述符示例

<!-Expiration value is in seconds, -1 = no time limit, 0 = deactivated-->
    <expiration-cache>3600</expiration-cache> <!- 1 Hour cache -->

要使用片段缓存功能,需要在 WebSphere Application Server 管理控制台的 Web Container 部分中激活 servlet 缓存(请参阅 Portlet 描述符示例)。WebSphere Application Server 还提供了一个缓存监视器企业应用程序 (CacheMonitor.ear),它对于可视化片段缓存的内容非常有用。

更新

您有设置的 portletEXPIRATION_CACHE吗?引用:

在运行时修改本地缓存 对于标准的 portlet,portlet 窗口可以通过在 RenderResponse 中设置 EXPIRATION_CACHE 属性来修改运行时的过期时间,如下所示:

RenderResponse.setProperty(
    PortletResponse.EXPIRATION_CACHE,
    (new Integer(3000)).toString() );

请注意,对我来说,这个值有点违反直觉,-1 表示永不过期,0 表示不缓存。

于 2010-01-18T16:59:41.843 回答
1

实际问题原来是 Portal 中的一个工作功能。具体来说,Portal 的动作保护可以防止相同的动作被提交两次,同时保持 Portal 的导航能力。有一个缓存保留每个成功操作的操作结果,并使用它们来比较和拒绝重复项。

对我们来说,问题是我们需要“比正常时间更长”的用户会话(60 分钟以上),并且有 1,000 多个并发用户,我们在几个小时后就泄露了这种保护机制。

portlet.xmlIBM 建议我们使用以下配置条目完全关闭缓存:

wps.multiple.action.execution = true

这允许双重提交,这可能会或可能不会损害业务功能。但是,我们内部的 Portal 框架已经包含了防止重复提交的机制,所以这对我们来说不是问题。

应我们的要求,IBM 确实为这个问题提供了一个补丁,它使缓存可定制,也就是说,让我们为每个用户配置存储在缓存中的操作结果的数量,因此您可以再次利用 Portal 的机制,在减少会话开销。这些门户配置设置是:

wps.multiple.action.cache.bound.enabled = true
wps.multiple.action.cache.key.maxsize = 40
wps.multiple.action.cache.value.maxsize = 10

您需要就此补丁与 IBM 联系,因为它当前不在已发布的修订包中。

于 2010-04-02T18:04:00.190 回答
0

您的 Websphere Portal Server 是否安装了最新的修订包?

http://www-01.ibm.com/support/docview.wss?uid=swg24024380&rs=0&cs=utf-8&context=SHRKX&dc=D420&loc=en_US&lang=en&cc=US

您也可能对以下讨论感兴趣

http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14427700&tstart=0

更新:

只是扔一些盲目的折叠飞镖。

  • “RES#”对我来说听起来像是资源。
  • 从论坛堆栈跟踪中,“DefaultActionResultManager.storeDocument”表明它正在存储文档。

因此看起来您的资源(生成的门户页面)正在被缓存。检查是否有一些参数可以限制资源的缓存大小。

同样在另一个测试集中缓存过期时间为 5 分钟而不是一个小时。

于 2010-01-26T01:39:08.153 回答