系统上线后,经常出现内存泄漏的情况,具体如下:
生产环境:AIX53+Weblog 9.2+Oracle
应用:SSH
项目中使用了自定义的tag,实现tab页的功能,即一个页面有多个tab页签构成。下面的错误是OutOfMemoryError报的错误信息,注意标红的地方,这个OutOfMemoryError总是出现在这个地方。
java.lang.OutOfMemoryError at com.ibm.oti.vm.VM.initializeClassLoader(Native Method) at java.lang.ClassLoader.<init>(ClassLoader.java:118) at sun.reflect.ClassDefiner$1.run(ClassDefiner.java:60) at java.security.AccessController.doPrivileged(AccessController.java:193) at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:57) at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399) at java.security.AccessController.doPrivileged(AccessController.java:193) at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395) at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:77) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:52) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:615) at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:216) at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:208) at org.apache.commons.digester.Rule.end(Rule.java:228) at org.apache.commons.digester.Digester.endElement(Digester.java:1067) at weblogic.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:586) at weblogic.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:223) at weblogic.apache.xerces.impl.XMLNamespaceBinder.emptyElement(XMLNamespaceBinder.java:596) at weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:748) at weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1478) at weblogic.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:330) at weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:526) at weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:582) at weblogic.apache.xerces.parsers.XMLParser.parse(XMLParser.java:153) at weblogic.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1176) at weblogic.xml.jaxp.WebLogicXMLReader.parse(WebLogicXMLReader.java:133) at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:153) at org.apache.commons.digester.Digester.parse(Digester.java:1610) at com.gwssi.gwaic.common.taglib.html.TabsTag.parse(TabsTag.java:166) at com.gwssi.gwaic.common.taglib.html.TabsTag.doEndTag(TabsTag.java:36) at jsp_servlet._gwaic._module._qydj._sl._bg.__yxzrgs._jsp__tag22(__yxzrgs.java:947) at jsp_servlet._gwaic._module._qydj._sl._bg.__yxzrgs._jspService(__yxzrgs.java:265) at weblogic.servlet.jsp.JspBase.service(JspBase.java:34) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:225) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:127) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:496) at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:245) at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263) at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:225) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:127) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at com.gwssi.gwaic.common.GwssiController.doFilter(GwssiController.java:91) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at com.gwssi.framework.console.controller.GwssiControllerFilter.doFilter(GwssiControllerFilter.java:40) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at com.gwssi.framework.console.controller.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:102) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3212) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
标红的部分,业务上是点一个“受理”按钮,然后生成一个具有10几个的tab页签的页面。
附件里是我用heapAnalyzer打开宕机后产生的heapdump文件的分析结果,嫌疑最大的引起泄漏的地方分析出的大致的意思是一个hashmap里面放了35个list,一下子占了当前可用heap size 的60%,可是如何知道,这个“嫌疑犯”藏在应用程序的哪个角落???如何找到包名,类名?
哪位分析过内存泄漏的分析一下?
相关资源:敏捷开发V1.0.pptx