[ https://issues.apache.org/jira/browse/PDFBOX-2901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15628279#comment-15628279 ]
Evan Sayer commented on PDFBOX-2901: ------------------------------------ Here's a stack-trace from a thread-dump of the stuck JVM: {code} "pf_test-emitter-0" #323 daemon prio=5 os_prio=0 tid=0x00007fc09839a000 nid=0x32a6 runnable [0x00007fbfad6bc000] java.lang.Thread.State: RUNNABLE at java.lang.System.identityHashCode(Native Method) at java.util.HashMap$TreeNode.tieBreakOrder(HashMap.java:1896) at java.util.HashMap$TreeNode.putTreeVal(HashMap.java:1992) at java.util.HashMap.putVal(HashMap.java:637) at java.util.HashMap.put(HashMap.java:611) at org.apache.pdfbox.pdmodel.graphics.shading.TriangleBasedShadingContext.calcPixelTable(TriangleBasedShadingContext.java:121) at org.apache.pdfbox.pdmodel.graphics.shading.GouraudShadingContext.calcPixelTable(GouraudShadingContext.java:111) at org.apache.pdfbox.pdmodel.graphics.shading.TriangleBasedShadingContext.createPixelTable(TriangleBasedShadingContext.java:80) at org.apache.pdfbox.pdmodel.graphics.shading.Type4ShadingContext.<init>(Type4ShadingContext.java:65) at org.apache.pdfbox.pdmodel.graphics.shading.Type4ShadingPaint.createContext(Type4ShadingPaint.java:66) at sun.java2d.pipe.AlphaPaintPipe.startSequence(AlphaPaintPipe.java:84) at sun.java2d.pipe.AAShapePipe.renderTiles(AAShapePipe.java:168) at sun.java2d.pipe.AAShapePipe.renderPath(AAShapePipe.java:159) at sun.java2d.pipe.AAShapePipe.fill(AAShapePipe.java:68) at sun.java2d.pipe.PixelToParallelogramConverter.fill(PixelToParallelogramConverter.java:164) at sun.java2d.pipe.ValidatePipe.fill(ValidatePipe.java:160) at sun.java2d.SunGraphics2D.fill(SunGraphics2D.java:2527) at org.apache.pdfbox.rendering.PageDrawer.shadingFill(PageDrawer.java:921) at org.apache.pdfbox.contentstream.operator.graphics.ShadingFill.process(ShadingFill.java:41) at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472) at org.apache.pdfbox.contentstream.PDFStreamEngine.processTilingPattern(PDFStreamEngine.java:371) at org.apache.pdfbox.rendering.PageDrawer.drawTilingPattern(PageDrawer.java:222) at org.apache.pdfbox.rendering.TilingPaint.getImage(TilingPaint.java:171) at org.apache.pdfbox.rendering.TilingPaint.<init>(TilingPaint.java:69) at org.apache.pdfbox.rendering.PageDrawer.getPaint(PageDrawer.java:251) at org.apache.pdfbox.rendering.PageDrawer.getNonStrokingPaint(PageDrawer.java:529) at org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:588) at org.apache.pdfbox.contentstream.operator.graphics.FillEvenOddRule.process(FillEvenOddRule.java:36) at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446) at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:189) at org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:208) at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:139) at org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:94) {code} {{PageDrawer.getNonStrokingPaint()}} can lead to that same shading logic it seems, but that call happens before the patch here is applied to clip the shaded area. Or that's my understanding, any assistance/advice is much appreciated. :-) > High CPU load and OutOfMemoryError when rendering shading > --------------------------------------------------------- > > Key: PDFBOX-2901 > URL: https://issues.apache.org/jira/browse/PDFBOX-2901 > Project: PDFBox > Issue Type: Bug > Components: Rendering > Affects Versions: 1.8.9, 1.8.10, 1.8.11, 2.0.0 > Reporter: Tilman Hausherr > Assignee: Tilman Hausherr > Fix For: 1.8.11, 2.0.0 > > Attachments: PDFBOX-2901-outofmemory.pdf > > > By Frank D. from the mailing list: > {quote} > When we try to convert the attached pdf, the CPU load of tomcat is raising > and it seems, that the process hangs. The tomcat process is no more > responsive and after a long while, we get an memory overflow. Also the server > load is very high meanwhile. > {quote} > Some debugging at 50 dpi: > {code} > PDFOperator{cs}: [COSName{CS0}] > PDFOperator{scn}: [COSName{P0}] > PDFOperator{gs}: [COSName{GS0}] > PDFOperator{m}: [COSFloat{-10551.00391}, COSFloat{667.6051}] > PDFOperator{l}: [COSFloat{-10551.00391}, COSFloat{1447.09143}] > PDFOperator{l}: [COSFloat{9338.57129}, COSFloat{1447.09143}] > PDFOperator{l}: [COSFloat{9338.57129}, COSFloat{667.6051}] > PDFOperator{f}: [] > f = Fill path using non zero winding rule > (...wait...) > PDFOperator{cs}: [COSName{CS0}] > PDFOperator{scn}: [COSName{P0}] > PDFOperator{gs}: [COSName{GS0}] > PDFOperator{m}: [COSFloat{-18801.79492}, COSFloat{667.6051}] > PDFOperator{l}: [COSFloat{-18801.79492}, COSFloat{1447.09143}] > PDFOperator{l}: [COSFloat{1087.7804}, COSFloat{1447.09143}] > PDFOperator{l}: [COSFloat{1087.7804}, COSFloat{667.6051}] > PDFOperator{f}: [] > (...wait...) > PDFOperator{cs}: [COSName{CS0}] > PDFOperator{scn}: [COSName{P0}] > PDFOperator{gs}: [COSName{GS0}] > PDFOperator{m}: [COSFloat{-18801.79492}, COSFloat{11.15869}] > PDFOperator{l}: [COSFloat{-18801.79492}, COSFloat{790.64502}] > PDFOperator{l}: [COSFloat{1087.7804}, COSFloat{790.64502}] > PDFOperator{l}: [COSFloat{1087.7804}, COSFloat{11.15869}] > PDFOperator{f}: [] > (...wait...) > (...wait...) > (...wait...) > PDFOperator{cs}: [COSName{CS0}] > PDFOperator{scn}: [COSName{P0}] > PDFOperator{gs}: [COSName{GS0}] > PDFOperator{m}: [COSFloat{-10551.00391}, COSFloat{667.6051}] > PDFOperator{l}: [COSFloat{-10551.00391}, COSFloat{1447.09143}] > PDFOperator{l}: [COSFloat{9338.57129}, COSFloat{1447.09143}] > PDFOperator{l}: [COSFloat{9338.57129}, COSFloat{667.6051}] > PDFOperator{f}: [] > Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit > exceeded > at sun.java2d.cmm.kcms.CMMImageLayout.<init>(Unknown Source) > at sun.java2d.cmm.kcms.ICC_Transform.colorConvert(Unknown Source) > at java.awt.color.ICC_ColorSpace.toRGB(Unknown Source) > at > org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB.toRGB(PDDeviceRGB.java:82) > at > org.apache.pdfbox.pdmodel.graphics.shading.ShadingContext.convertToRGB(ShadingContext.java:142) > at > org.apache.pdfbox.pdmodel.graphics.shading.TriangleBasedShadingContext.evalFunctionAndConvertToRGB(TriangleBasedShadingContext.java:167) > at > org.apache.pdfbox.pdmodel.graphics.shading.TriangleBasedShadingContext.calcPixelTable(TriangleBasedShadingContext.java:121) > at > org.apache.pdfbox.pdmodel.graphics.shading.GouraudShadingContext.calcPixelTable(GouraudShadingContext.java:111) > at > org.apache.pdfbox.pdmodel.graphics.shading.TriangleBasedShadingContext.createPixelTable(TriangleBasedShadingContext.java:80) > at > org.apache.pdfbox.pdmodel.graphics.shading.Type4ShadingContext.<init>(Type4ShadingContext.java:65) > at > org.apache.pdfbox.pdmodel.graphics.shading.Type4ShadingPaint.createContext(Type4ShadingPaint.java:66) > at sun.java2d.pipe.AlphaPaintPipe.startSequence(Unknown Source) > at sun.java2d.pipe.SpanShapeRenderer$Composite.startSequence(Unknown > Source) > at sun.java2d.pipe.SpanShapeRenderer.renderSpans(Unknown Source) > at sun.java2d.pipe.SpanShapeRenderer.fill(Unknown Source) > at sun.java2d.pipe.ValidatePipe.fill(Unknown Source) > at sun.java2d.SunGraphics2D.fill(Unknown Source) > at > org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:611) > {code} > The problem is that a type 4 shading ("gouraud shading") is called with huge > triangles (not shown here but I saw it in debugging) and huge device bounds > (e.g. x=-10551.004,y=667.6051,w=19889.574,h=779.4863). The shading routines > of types 4-7 create a mapping table for the color of every point in a shading > triangle. Because these triangles and the device bounds are so huge, the > table is huge and takes a long time to be calculated, uses a lot of memory, > with the result above. > IMHO it is a java bug, it should consider the clipping when calculating the > device bounds when calling Paint.createContext() and not pass device bounds > outside of the clipping region. The solution will be (once again :-( ) to do > ourselves what java doesn't. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org