[ 
https://issues.apache.org/jira/browse/PDFBOX-3721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15950663#comment-15950663
 ] 

anil kumar commented on PDFBOX-3721:
------------------------------------

Hi Tilman,

I've tried with the tempfile as you said above.But it was failed with the below 
exception.
This new issue is OS(Unix) related.

Caused by: java.io.IOException: Too many open files
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:2024)
at org.apache.pdfbox.io.ScratchFile.enlarge(ScratchFile.java:217)
at org.apache.pdfbox.io.ScratchFile.getNewPage(ScratchFile.java:167)
at org.apache.pdfbox.io.ScratchFileBuffer.addPage(ScratchFileBuffer.java:126)
at org.apache.pdfbox.io.ScratchFileBuffer.(ScratchFileBuffer.java:84)
at org.apache.pdfbox.io.ScratchFile.createBuffer(ScratchFile.java:417)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1114)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1032)
at 
org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:259)
at 
info.anil.statement.MergeStatements.mergeAllStatements(MergeStatements.java:134)

which is unix related, Now the problem is i can't increase the max. no. of 
files open at a time.

So I've used Main memory with a restriction(2GB) 
eg: mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly(2147483648L));

Which is ended up with exception as well.

Caused by: java.io.IOException: Maximum allowed scratch file memory exceeded.

at org.apache.pdfbox.io.ScratchFile.getNewPage(ScratchFile.java:172)

at org.apache.pdfbox.io.ScratchFileBuffer.addPage(ScratchFileBuffer.java:126)

at org.apache.pdfbox.io.ScratchFileBuffer.(ScratchFileBuffer.java:84)

at org.apache.pdfbox.io.ScratchFile.createBuffer(ScratchFile.java:403)

at org.apache.pdfbox.cos.COSStream.createRawOutputStream(COSStream.java:258)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:117)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:99)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:108)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:125)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:99)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:136)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:136)

at 
org.apache.pdfbox.multipdf.PDFCloneUtility.cloneForNewDocument(PDFCloneUtility.java:136)

at 
org.apache.pdfbox.multipdf.PDFMergerUtility.appendDocument(PDFMergerUtility.java:554)

at 
org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:261)

What is the best memory setting for it to ran succesfully? is there any other 
better solution?

Thanks,
Anil Kumar


> PDFMergerUtility is throwing java.lang.OutOfMemoryError: Java heap space 
> exception while trying to merge documents
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: PDFBOX-3721
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3721
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Utilities
>    Affects Versions: 2.0.3
>            Reporter: anil kumar
>            Priority: Critical
>              Labels: performance
>
> My code snapshot is like this:
> ByteArrayOutputStream mergedPdfStream = new ByteArrayOutputStream();
>       PDFMergerUtility pdfMerger = new PDFMergerUtility();
> pdfMerger.setDestinationStream(mergedPdfStream);      
> //looping through whole list of documents
> pdfMerger.addSource(new ByteArrayInputStream(bos.toByteArray()));
> //loop ends
> pdfMerger.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
> I am getting below exception
> java.lang.OutOfMemoryError: Java heap space
>  at java.util.Arrays.copyOf(Arrays.java:3236)
>  at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
>  at 
> java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
>  at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
>  at 
> org.apache.pdfbox.pdfwriter.COSStandardOutputStream.write(COSStandardOutputStream.java:129)
>  at org.apache.pdfbox.io.IOUtils.copy(IOUtils.java:68)
>  at org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1193)
>  at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:383)
>  at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:530)
>  at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:459)
>  at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:443)
>  at 
> org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1088)
>  at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:419)
>  at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1359)
>  at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1246)
>  at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1146)
>  at 
> org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:280)
>  
> We tried to increase memory also, which will allows only few more documents. 
> Soon after that, I am getting same exception.
> is there any better solution to fix this.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to