Java Jasperr在大量报告后报告内存不足
我会避免JasperReport服务器出现内存不足异常。 请帮帮我 2015年8月29日编辑 我正在使用Ubuntu14.04和Java8上的JasperReport服务器6.1 同样的结果---详情如下 我编写了一个java代码从我的JasperReport服务器实例下载(存储在本地文件中)多个pdf报告。 它可以很好地处理大约600个报告,之后会产生500个错误。 在JasperServer日志文件中,我看到内存不足异常 也许我的代码有错误?别这么想。 相反,我认为jasperReport服务器中存在内存泄漏 在这里您可以看到我的java代码(类ga.system.jasperserver.ReportExtractor) 在这里,您可以看到我得到的异常的一个片段 java.io.IOException:服务器返回了URL: 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream0(未知源) 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知源) 位于java.net.URL.openStream(未知源) 位于ga.system.jasperserver.ReportExtractor.extract(ReportExtractor.java:102) ... ... 在这里,您可以看到登录JasperReport服务器(catalina.out代码段) 我的服务器中使用的虚拟机(applicationContext.xml代码段)Java Jasperr在大量报告后报告内存不足,java,jasper-reports,out-of-memory,jasperserver,Java,Jasper Reports,Out Of Memory,Jasperserver,我会避免JasperReport服务器出现内存不足异常。 请帮帮我 2015年8月29日编辑 我正在使用Ubuntu14.04和Java8上的JasperReport服务器6.1 同样的结果---详情如下 我编写了一个java代码从我的JasperReport服务器实例下载(存储在本地文件中)多个pdf报告。 它可以很好地处理大约600个报告,之后会产生500个错误。 在JasperServer日志文件中,我看到内存不足异常 也许我的代码有错误?别这么想。 相反,我认为jasperReport服
我在Ubuntu14.04(trusty)、Java8上使用JasperReport服务器5.6.0
2015年8月29日编辑
在Ubuntu14.04和Java8上使用JasperReport服务器6.1的新测试
同样的结果,新安装的服务器在580 pdf生成后,服务器挂起,显示此消息(请阅读最后一行:“起因:java.lang.OutOfMemoryError:java堆空间”):
org.hibernate.exception.genericjdbception:无法初始化
惰性属性:
[com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.persistent.RepoFileResource#8448]
在
org.hibernate.exception.sqlstatecoverter.handledNonsspecificeException(sqlstatecoverter.java:126)
在
org.hibernate.exception.sqlstatecoverter.convert(sqlstatecoverter.java:114)
在
org.hibernate.exception.jdbceptionhelper.convert(jdbceptionhelper.java:66)
在
org.hibernate.persister.entity.AbstractEntityPersister.initializeLazyPropertiesFromDatastore(AbstractEntityPersister.java:831)
在
org.hibernate.persister.entity.AbstractEntityPersister.InitializeLazProperty(AbstractEntityPersister.java:771)
在
org.hibernate.intercept.AbstractFieldInterceptor.intercept(AbstractFieldInterceptor.java:97)
在
org.hibernate.intercept.cglib.FieldInterceptorImpl.readObject(FieldInterceptorImpl.java:98)
在
com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.persistent.RepoFileResource.$cglib\u read\u data(未知
来源)在
jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.persistent.RepoFileResource.getData(未知
来源)在
jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.persistent.RepoFileResource.copyData(未知
来源)在
jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryServiceImpl$22.execute(HibernateRepositoryServiceImpl.java:1420)
在
jaspersoft.jasperserver.api.metadata.common.service.impl.HibernateDaoImpl.executeCallback(HibernateDaoImpl.java:56)
在
jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate.HibernateRepositoryServiceImpl.getResourceData(HibernateRepositoryServiceImpl.java:1414)
at sun.reflect.GeneratedMethodAccessor337.invoke(未知源)at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:150)
在
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
在
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
位于com.sun.proxy.$Proxy32.getResourceData(未知源)
sun.reflect.GeneratedMethodAccessor337.invoke(未知源)位于
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:150)
在
jaspersoft.jasperserver.api.metadata.user.service.impl.PermissionsPrefetcher.invoke(PermissionsPrefetcher.java:79)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
在
jaspersoft.jasperserver.api.metadata.user.service.impl.PermissionsPrefetcher.invoke(PermissionsPrefetcher.java:79)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
在
org.springframework.security.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:66)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
在
org.springframework.security.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:66)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
在
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.jav
for (ReportParameters aReportParams : listOfReportParameters)
{
String filename = "report-"+aReportParams.getParameter1()+ ".PDF";
jasperreport_url = combineParamsIntoJasperserverUrl(aReportParams);
URL website = new URL(jasperreport_url);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destPath+"/" +filename);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
2015-08-17 18:16:17,091 ERROR RunReportServiceImpl,pool-5-thread-66:511 - caught Throwable exception: Java heap space
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2271)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at com.lowagie.text.pdf.OutputStreamCounter.flush(Unknown Source)
at com.lowagie.text.DocWriter.close(Unknown Source)
at com.lowagie.text.pdf.PdfWriter.close(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.close(Unknown Source)
at com.lowagie.text.Document.close(Unknown Source)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:815)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:513)
at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.EngineServiceImpl.exportToPdf(EngineServiceImpl.java:559)
at com.jaspersoft.jasperserver.remote.exporters.PdfExporter.exportReport(PdfExporter.java:98)
at com.jaspersoft.jasperserver.remote.services.impl.ReportExecutorImpl.exportReport(ReportExecutorImpl.java:177)
at com.jaspersoft.jasperserver.remote.services.impl.RunReportServiceImpl.generateReportOutput(RunReportServiceImpl.java:478)
at com.jaspersoft.jasperserver.remote.services.impl.RunReportServiceImpl.executeExport(RunReportServiceImpl.java:378)
at com.jaspersoft.jasperserver.remote.services.impl.RunReportServiceImpl$2.run(RunReportServiceImpl.java:343)
at com.jaspersoft.jasperserver.api.logging.util.LoggableExecutorService$1.run(LoggableExecutorService.java:59)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
<bean id="fileVirtualizerFactory" class="com.jaspersoft.jasperserver.api.engine.common.service.impl.FileVirtualizerFactory">
<property name="maxSize" value="3000"></property>
<property name="directory" value="${java.io.tmpdir}"></property>
</bean>