java.lang.OutOfMemoryError: GC overhead limit exceeded

0
I'm trying to generate a pdf report (document template) based on a list holding over 50.000 records. After some time Mendix returns the "java.lang.OutOfMemoryError: GC overhead limit exceeded" error. How can I solve this problem. Limiting the resultlist is no option. Heap space is set to 1024Mb Stack: java.lang.OutOfMemoryError: GC overhead limit exceeded at org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManager.java:249) at org.apache.fop.layoutmgr.AreaAdditionUtil.addAreas(AreaAdditionUtil.java:121) at org.apache.fop.layoutmgr.table.TableCellLayoutManager.addAreas(TableCellLayoutManager.java:417) at org.apache.fop.layoutmgr.table.RowPainter.addAreasForCell(RowPainter.java:429) at org.apache.fop.layoutmgr.table.RowPainter.addAreasAndFlushRow(RowPainter.java:307) at org.apache.fop.layoutmgr.table.RowPainter.handleTableContentPosition(RowPainter.java:160) at org.apache.fop.layoutmgr.table.TableContentLayoutManager.addTablePartAreas(TableContentLayoutManager.java:486) at org.apache.fop.layoutmgr.table.TableContentLayoutManager.addBodyAreas(TableContentLayoutManager.java:473) at org.apache.fop.layoutmgr.table.TableContentLayoutManager.addAreas(TableContentLayoutManager.java:409) at org.apache.fop.layoutmgr.table.TableLayoutManager.addAreas(TableLayoutManager.java:363) at org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManager.java:389) at org.apache.fop.layoutmgr.BlockLayoutManager.addAreas(BlockLayoutManager.java:389) at org.apache.fop.layoutmgr.AreaAdditionUtil.addAreas(AreaAdditionUtil.java:121) at org.apache.fop.layoutmgr.FlowLayoutManager.addAreas(FlowLayoutManager.java:342) at org.apache.fop.layoutmgr.PageBreaker.addAreas(PageBreaker.java:280) at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:626) at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:497) at org.apache.fop.layoutmgr.PageBreaker.doPhase3(PageBreaker.java:308) at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:450) at org.apache.fop.layoutmgr.PageBreaker.doLayout(PageBreaker.java:85) at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:107) at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:238) at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:120) at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:349) at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:177) at org.apache.xalan.transformer.TransformerIdentityImpl.endElement(TransformerIdentityImpl.java:1102) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1789) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2965) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
asked
5 answers
2

Hi Rene,

Create the report in parts and merge it with a PDF merge java action.

answered
2

The document generator holds the entire DOM of the document in memory, it would need considerable refactoring to change this. There are some other easier optimizations though, but it's not high on the roadmap right now. For now the easiest solution is to reduce the size of the document or its data, for example by merging PDF's as Herbert suggested. If you have very high resolution images in your document, you could try to reduce them in size as well.

answered
1

HI Rene,

I dont have an exact solution, but a reference if that helps.

You have already set the heap space now try to set this env variable

FOPOPTS=-Xmx999m %FOPOPTS% from project settings.

See if that helps or not.

if this sets correctly then it should run fine with the number of records you have mentioned above or more.

If you want to know about fop then probably this site may help

https://xmlgraphics.apache.org/fop/1.1/embedding.html

answered
0

Herbert,

Thought of that (merging). Was wondering if their is another solution

answered
0

I think the problem is holding all records in memory. Would it be possible to batch iterate over the objects?

Regards,

Ronald

answered