2010-01-18 30 views
2

我有一个应用程序以适当的速度泄漏出java堆(400个用户在2小时后剩余25%...在注销后所有内存都被恢复)并且我们已经确定导致内存泄漏的项目作为字符串放置在会话中,似乎由Portal本身生成。这些值是编码的门户网站URI(非常长的结束编码的字符串......通常大小约为19kb),并且这些密钥似乎是由7个随机生成的字符(前缀为RES#(例如,RES#NhhEY37))。WebSphere Portal中的内存泄露与门户网站URI有关

我们已经通过使用会话跟踪和捕捉堆转储了应用程序,这导致确定在几乎每个页面上创建并添加到会话中的这些对象之一...实际上,它似乎是在提交数据的每个页面上(这是大多数页面)。因此,它可以是1:1的页面,也可以是1:1的表格。

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

回答

1

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

对我们来说,问题是,我们需要的用户会话(60+分钟)“长于正常”,并与1000多个并发用户,我们只是几个小时后泄露出去对这个保护机制的事实。

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

wps.multiple.action.execution = true 

这使得双屈服了,这可能会或可能不会伤害业务功能。但是,我们的内部门户框架已经包含防止双重提交的机制,所以这对我们来说不是问题。

根据我们的要求,IBM确实回来了针对此问题的修补程序,这使得缓存可以自定义,也就是让我们为每个用户配置缓存中存储的操作结果的数量,从而您可以利用Portal的机制再次,减少会议开销。这些门户网站的配置设置为:

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

你需要联系IBM关于这个补丁,因为它是目前不能发布的补丁包。

1

它可以是portlet缓存吗?您可以激活servlet缓存并声明一个很长的portlet到期时间。从techjournal报价:

Portlet可以宣传自己的能力,在片段缓存设置其到期时间在其portlet.xml描述(see Portlet descriptor example

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

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

更新

你有设置EXPIRATION_CACHE门户?报价:

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

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

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

+0

去看看...谢谢你的提示。 – Greg 2010-01-18 17:41:16

+0

应用程序完全禁用了缓存。打开它为每个门户1小时咯咯笑,并进行了另一次负载测试。相同的泄漏模式。 :(的追求不断! – Greg 2010-01-18 22:08:10

0

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

http://www-01.ibm.com/support/docview.wss?uid=swg24024380&rs=0&cs=utf-8&context=SSHRKX&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分钟,而不是小时。

+0

我要通过这些的PK看看,但我不知道他们解决这个问题。可能是值得修补只是为了看看,不管。 滑稽你指出了开发工作论坛...我是那个线程中的gheidorn。不幸的是,没有答案。 – Greg 2010-01-26 14:22:01

+0

看到了,我找到了你,吉利多恩。看看上面的更多更新。 – 2010-01-26 14:55:53