系统上线后,经常出现内存泄漏的情况,具体如下:
生产环境: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%,可是如何知道,这个“嫌疑犯”藏在应用程序的哪个角落???如何找到包名,类名?
哪位分析过内存泄漏的分析一下?