Java 使用Virtualizer使用Jasper生成大型报告需要花费太多时间

Java 使用Virtualizer使用Jasper生成大型报告需要花费太多时间,java,performance,jasper-reports,Java,Performance,Jasper Reports,我们正在使用Japser在应用程序中生成报告 我们已经从5.0.1升级到6.4,以获得更好的性能,但这正是我们在几次测试运行后没有看到好结果的地方。生成报告大约需要44分钟 这是我们的配置 Jasper版本:6.4 JDK1.7 服务器:tomcat 7,3GB RAM 记录数目:850k 我们从数据库中得到结果并将其交给jasper 下面是生成报告时的内存消耗和CPU利用率 寻找有关如何以较低内存消耗减少报表生成时间的建议。 这就是报表在这个大数据集上的表现,还是我们在这里做错了什么 我们正

我们正在使用Japser在应用程序中生成报告

我们已经从5.0.1升级到6.4,以获得更好的性能,但这正是我们在几次测试运行后没有看到好结果的地方。生成报告大约需要44分钟

这是我们的配置

Jasper版本:6.4

JDK1.7

服务器:tomcat 7,3GB RAM

记录数目:850k

我们从数据库中得到结果并将其交给jasper

下面是生成报告时的内存消耗和CPU利用率

寻找有关如何以较低内存消耗减少报表生成时间的建议。 这就是报表在这个大数据集上的表现,还是我们在这里做错了什么

我们正在使用JRSwapFileVirtualizer。当不使用虚拟机时,生成报告所需的时间会更好,但我们无法生成大型报告。 我们应该使用另一个虚拟机(如Gzip虚拟机)还是调整文件虚拟机(如Gzip虚拟机)的参数 maxSize、blockSize和minGrowCount参数

更新:
使用GzipVirtualizer进行了尝试,但在计时或内存消耗方面没有太大差异

这张图非常明显-您使用的CPU和内存非常少。我的smartwatch的内存比你现在运行的要多——在一台有8+GB内存的真正机器上运行它,并运行一个64位JVM。切换到磁盘将使其速度变得难以置信的慢。这是64位jvm,但不确定抛出更多内存将如何解决此问题。jasper是否会消耗如此多的内存并花费如此长的时间来生成报告?如果您使用的是交换文件,那么我对您的表现印象深刻。即使使用SSD,内存也比磁盘快几个数量级。因此,使用磁盘作为内存将大大降低速度。从图中可以明显看出,您使用的CPU和内存非常少。我的smartwatch的内存比你现在运行的要多——在一台有8+GB内存的真正机器上运行它,并运行一个64位JVM。切换到磁盘将使其速度变得难以置信的慢。这是64位jvm,但不确定抛出更多内存将如何解决此问题。jasper是否会消耗如此多的内存并花费如此长的时间来生成报告?如果您使用的是交换文件,那么我对您的表现印象深刻。即使使用SSD,内存也比磁盘快几个数量级。因此,使用磁盘作为内存将大大降低速度。
JRSwapFile swapFile = new JRSwapFile(System.getProperty("java.io.tmpdir"), 4096, 25);
JRAbstractLRUVirtualizer virtualizer = new JRSwapFileVirtualizer(2, swapFile, true);
virtualizer.setReadOnly(false);
context.getReportParams().put(JRParameter.REPORT_VIRTUALIZER, virtualizer);