1

複数の小さな PDF レポート (たとえば、50000 件のレポート、それぞれ 2 ~ 3 ページ、ファイル サイズ 50 ~ 60 KB) を生成しているときに、メモリ不足の問題に直面しています。3000 件のレポートが生成された後に発生するメモリ不足エラー。

以下の行を実行した後、メモリがクリーンアップされていないことがわかります。

JasperFillManager.fillReportToFile(compiledPath,
        file.getPath(), null, dataSource);

JRSwapFileVirtualizer を使用して以下の代替コードを試しましたが、問題は解決しませんでした。

dataSource = new JRBeanArrayDataSource(myBean);
swapFile =  new JRSwapFile(outputFileLocation, 1024, 1024);
virtualizer = new JRSwapFileVirtualizer(3,swapFile, true);

parameterMap = new HashMap();
parameterMap.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);


JasperFillManager.fillReportToFile(compiledPath,
        file.getPath(), parameterMap, dataSource);

dataSource = null;
virtualizer.cleanup();

jasperPrint = (JasperPrint) JRLoader.loadObject(file);

compiledPath = null;
file = null;


pdfExporter = new JRPdfExporter();
pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,
    jasperPrint);
pdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
    finalOutputfile.toString());

pdfExporter.exportReport();

各レポートが生成された後にメモリをクリーンアップする方法についての提案は役に立ちます。

4

1 に答える 1

1

pojo または従来の JSP Web アプリケーションについてはわかりませんが、私の春のアプリケーションでは、以前は同じメモリ不足の問題がありました。トレース ログを引き出して、テンプレートのレンダリングに関する多くの情報を見つけました。jrxmlの代わりにコンパイル前のテンプレートであることを思い出させてくれます.jasper。そのため、すべてのテンプレートを置き換えてから、メモリ不足の問題が再び発生することはありません。これは、@Joop Eggen のアドバイスへの追加と考えてください。

于 2013-02-05T22:19:44.403 に答える