前台批量打印功能,内存溢出,怀疑后台有死循环
系统环境:
系统嵌入部署,finereport版本:2015.06.29.08.09.49.350
Tomcat版本:8.0.23,JDK版本:1.8.0_40,tomcat运行参数配置如下:
-Xms2048m
-Xmx2048m
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
参照在线文档,执行js语句:
var printurl="http://localhost:8088/ReportServer?reportlets=";
FR.doURLPDFPrint(printurl, false);
内存被耗尽,发生OOM异常,堆栈信息:
SEVERE: Java heap space
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:475)
at com.fr.main.AbstractFineBook.addReport(Unknown Source)
at com.fr.main.AbstractTemplateWorkBook.addReport(Unknown Source)
at com.fr.main.impl.WorkBookTemplateDelegate.addReport(Unknown Source)
at com.fr.web.reportlet.MultiTemplateReportlet.createReport(Unknown Source)
at com.fr.web.core.Reportlet.createSessionIDInfor(Unknown Source)
at com.fr.web.core.SessionDealWith.generateSessionID(Unknown Source)
at com.fr.web.core.SessionDealWith.generateSessionIDWithCheckRegister(Unknown Source)
at com.fr.web.core.ReportDispatcher.dealWithRequest(Unknown Source)
at com.fr.web.BaseServlet.doGet(Unknown Source)
at com.fr.web.BaseServlet.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
同时,查看head dump,发现com.fr.main.AbstructFineBook$NameReport实例非常多,达到54388034个实例,这个显然是陷入了死循环。
head dump截图如下。
23537