1

我目前正在尝试找出在 Tomcat 6.0.26 上运行的 Liferay 门户(6.0.6)上的内存泄漏。我们一直在查看 OutOfMemoryException 发生时产生的内存转储,并且有非常明显的异常。一到三个 ThreadWithAttributes 有一个 String / char 数组,每个数组占用超过 1GB 的内存。它的内容是“10970_LAYOUT_56_INSTANCE_1GnU=ADddfj6O, 536133_LAYOUT_49=J23g02gH”的形式......一遍又一遍地重复。

据我了解,这是某种 portlet-id 和它的实例 id,但是我如何使用这些信息来找出导致这种情况的 portlet?总的来说,我对 Liferay 和 webapps 基本上是全新的,尽管对常规 Java SE 应用程序有很好的背景。据我了解,Tomcat 正在使用一个线程池,该线程池要求 portlet 自行清理,但我们有大量的 portlet,很难猜出负责人。那么,有没有办法使用该 String 来精确定位 portlet?

提前致谢

4

2 回答 2

1

在您的所有 portlet 中尝试下面提到的行之前,请阅读此内容...

        String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
于 2012-09-22T15:17:21.297 回答
1

请参阅 PortletInstanceFactoryImpl.java。这包含了包含所有 portlet 的 hashmap。“10970_LAYOUT_56_INSTANCE_1GnU=ADddfj6O”是 Portlet 实例 ID。liferay 的问题,因为这个哈希图没有被清理。

于 2013-02-14T00:02:12.550 回答