我目前正在尝试找出在Tomcat 6.0.26上运行的Liferay门户(6.0.6)上的内存泄漏。我们一直在查看OutOfMemoryException发生并且有非常明显的异常时生成的内存转储。 1-3个ThreadWithAttributes具有一个String / char数组,每个数组占用1GB以上的内存。它的内容是
“ 10970_LAYOUT_56_INSTANCE_1GnU = ADddfj6O,536133_LAYOUT_49 = J23g02gH” ...一遍又一遍。
据我了解,这是某种portlet-id及其实例ID,但是我如何使用此信息来找出导致此问题的是porlet?我对Liferay和Webapp基本上完全陌生,尽管对常规Java SE应用程序有很好的了解。据我了解,Tomcat使用的是一个线程池,要求在Portlet自我清理后对其进行清理,但是我们拥有如此大量的Portlet,以至于很难猜到负责的Portlet。因此,有没有办法使用该String来精确定位portlet?
提前致谢
最佳答案
Read this在所有portlet中尝试以下提到的行之前...
String portletId = (String) request.getAttribute(WebKeys.PORTLET_ID);
关于tomcat - Liferay Portlet上的内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12509503/