ICEpdf
  1. ICEpdf
  2. PDF-784

Method getPageImage gets stuck sometimes

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.0.4
    • Fix Version/s: 6.2.4
    • Component/s: Core/Parsing
    • Labels:
      None
    • Environment:
      Windows Server 2008
    • Workaround Description:
      Set the system property -Dorg.icepdf.core.imageProxy=false

      Description

      Sometimes I see this stacktrace in javamelody:

      ajp-apr-8009-exec-40
      sun.misc.Unsafe.park(Native Method)
      java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
      java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
      java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
      java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
      java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:218)
      java.util.concurrent.FutureTask.get(FutureTask.java:83)
      org.icepdf.core.pobjects.graphics.ImageReference.createImage(ImageReference.java:107)
      org.icepdf.core.pobjects.graphics.CachedImageReference.getImage(CachedImageReference.java:55)
      org.icepdf.core.pobjects.graphics.ImageReference.drawImage(ImageReference.java:71)
      org.icepdf.core.pobjects.graphics.commands.ImageDrawCmd.paintOperand(ImageDrawCmd.java:50)
      org.icepdf.core.pobjects.graphics.Shapes.paint(Shapes.java:136)
      org.icepdf.core.pobjects.Page.paintPageContent(Page.java:543)
      org.icepdf.core.pobjects.Page.paint(Page.java:500)
      org.icepdf.core.pobjects.Page.paint(Page.java:432)
      org.icepdf.core.pobjects.Document.getPageImage(Document.java:1097)

      What could be the problem? The code is:

      byte[][] data = new byte[end - start + 1][];
              try {
                  int index = 0;
                  for (int i = start - 1; i < end; i++) {
                      baous = new ByteArrayOutputStream();
                      image = (BufferedImage) document.getPageImage(
                              i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX, 0, scale);
                      ImageIO.write(image, "png", baous);
                      data[index] = baous.toByteArray();
                      index++;
                      image.flush();
                      image = null;
                      baous.flush();
                      baous.close();
                  }
              } finally {
                  document.dispose();
              }

        Activity

        Hide
        Patrick Corless added a comment -

        Community memory has been seeing the stuck thread issue with 6.0.1

        Show
        Patrick Corless added a comment - Community memory has been seeing the stuck thread issue with 6.0.1
        Hide
        Yassine El Bouamri added a comment -

        Yes, it is single-threaded. So, can i use "-Dorg.icepdf.core.imageProxy=false" safely?

        Show
        Yassine El Bouamri added a comment - Yes, it is single-threaded. So, can i use "-Dorg.icepdf.core.imageProxy=false" safely?
        Hide
        Yassine El Bouamri added a comment -

        A few minutes ago, Tomcat just went out of memory and crashed:

        02-dic-2015 10:40:57 org.quartz.plugins.history.LoggingTriggerHistoryPlugin triggerFired
        INFO: Trigger ArchiveTriggerGroup.ArchiveWeeklyTrigger fired job ArchiveGroup.ArchiveWeeklyJob at: 10:40:57 12/02/2015
        02-dic-2015 10:41:08 org.quartz.plugins.history.LoggingTriggerHistoryPlugin triggerComplete
        INFO: Trigger ArchiveTriggerGroup.ArchiveWeeklyTrigger completed firing job ArchiveGroup.ArchiveWeeklyJob at 10:41:08 12/02/2015 with resulting trigger instruction code: DO NOTHING
        java.lang.OutOfMemoryError: Java heap space
        Dumping heap to /indenova/tomcat/logs/memory.dump ...
        Unable to create /indenova/tomcat/logs/memory.dump: El archivo ya existe
        02-dic-2015 10:42:58 org.icepdf.core.pobjects.graphics.ImageStreamReference call
        ADVERTENCIA: Error loading image: 2915 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2537, Height=1, Width=7274, DecodeParms=

        {Columns=7274, Predictor=15, Colors=3}, ColorSpace=DeviceRGB} 2915 0 R
        java.lang.OutOfMemoryError: Java heap space
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.allocateByteArray(ConservativeSizingByteArrayOutputStream.java:168)
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.<init>(ConservativeSizingByteArrayOutputStream.java:40)
        at org.icepdf.core.pobjects.Stream.getDecodedStreamBytes(Stream.java:176)
        at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:362)
        at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:289)
        at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:73)
        at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:39)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:662)
        02-dic-2015 10:43:35 org.icepdf.core.pobjects.graphics.ImageStreamReference call
        ADVERTENCIA: Error loading image: 2928 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2654, Height=1, Width=7274, DecodeParms={Columns=7274, Predictor=15, Colors=3}

        , ColorSpace=DeviceRGB} 2928 0 R
        java.lang.OutOfMemoryError: Java heap space
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.allocateByteArray(ConservativeSizingByteArrayOutputStream.java:168)
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.<init>(ConservativeSizingByteArrayOutputStream.java:40)
        at org.icepdf.core.pobjects.Stream.getDecodedStreamBytes(Stream.java:176)
        at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:362)
        at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:289)
        at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:73)
        at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:39)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
        at java.lang.Thread.run(Thread.java:662)
        02-dic-2015 10:43:35 org.icepdf.core.pobjects.graphics.ImageStreamReference call
        ADVERTENCIA: Error loading image: 2925 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2679, Height=1, Width=7274, DecodeParms=

        {Columns=7274, Predictor=15, Colors=3}, ColorSpace=DeviceRGB} 2925 0 R
        java.lang.OutOfMemoryError: Java heap space
        02-dic-2015 10:43:27 org.icepdf.core.pobjects.graphics.ImageStreamReference call
        ADVERTENCIA: Error loading image: 2880 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2686, Height=1, Width=7274, DecodeParms={Columns=7274, Predictor=15, Colors=3}

        , ColorSpace=DeviceRGB} 2880 0 R
        java.lang.OutOfMemoryError: Java heap space
        02-dic-2015 10:43:04 org.icepdf.core.util.content.NContentParser parse
        ADVERTENCIA: Error parsing content stream.
        java.lang.OutOfMemoryError: Java heap space
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.allocateByteArray(ConservativeSizingByteArrayOutputStream.java:168)
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.resizeArrayToFit(ConservativeSizingByteArrayOutputStream.java:162)
        at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.write(ConservativeSizingByteArrayOutputStream.java:77)
        at org.icepdf.core.pobjects.Stream.getDecodedStreamBytes(Stream.java:183)
        at org.icepdf.core.pobjects.ObjectStream.init(ObjectStream.java:64)
        at org.icepdf.core.pobjects.ObjectStream.loadObject(ObjectStream.java:86)
        at org.icepdf.core.util.LazyObjectLoader.loadObject(LazyObjectLoader.java:111)
        at org.icepdf.core.util.Library.getObject(Library.java:155)
        at org.icepdf.core.pobjects.Resources.getFont(Resources.java:140)
        at org.icepdf.core.util.content.AbstractContentParser.consume_Tf(AbstractContentParser.java:767)
        at org.icepdf.core.util.content.NContentParser.parseText(Unknown Source)
        at org.icepdf.core.util.content.NContentParser.parse(Unknown Source)
        at org.icepdf.core.pobjects.Page.init(Page.java:384)
        at org.icepdf.core.pobjects.Document.getPageDimension(Document.java:918)
        at com.indenova.server.documentViewer.DocumentViewerInterfaceImpl.fillPageSizes(DocumentViewerInterfaceImpl.java:1253)
        at com.indenova.server.documentViewer.DocumentViewerInterfaceImpl.getCacheFiles(DocumentViewerInterfaceImpl.java:1198)
        at com.indenova.server.documentViewer.DocumentViewerInterfaceImpl.getViewerData(DocumentViewerInterfaceImpl.java:337)
        at sun.reflect.GeneratedMethodAccessor581.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:163)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:206)
        02-dic-2015 10:48:52 org.quartz.impl.jdbcjobstore.JobStoreSupport recoverMisfiredJobs
        INFO: Handling 4 trigger(s) that missed their scheduled fire-time.
        02-dic-2015 10:46:39 org.icepdf.core.pobjects.graphics.ImageStreamReference call
        ADVERTENCIA: Error loading image: 2940 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2764, Height=1, Width=7274, DecodeParms=

        {Columns=7274, Predictor=15, Colors=3}

        , ColorSpace=DeviceRGB} 2940 0 R
        java.lang.OutOfMemoryError: Java heap space

        I don't have a sample document, I'm just seeing those stacktraces in the log.

        Show
        Yassine El Bouamri added a comment - A few minutes ago, Tomcat just went out of memory and crashed: 02-dic-2015 10:40:57 org.quartz.plugins.history.LoggingTriggerHistoryPlugin triggerFired INFO: Trigger ArchiveTriggerGroup.ArchiveWeeklyTrigger fired job ArchiveGroup.ArchiveWeeklyJob at: 10:40:57 12/02/2015 02-dic-2015 10:41:08 org.quartz.plugins.history.LoggingTriggerHistoryPlugin triggerComplete INFO: Trigger ArchiveTriggerGroup.ArchiveWeeklyTrigger completed firing job ArchiveGroup.ArchiveWeeklyJob at 10:41:08 12/02/2015 with resulting trigger instruction code: DO NOTHING java.lang.OutOfMemoryError: Java heap space Dumping heap to /indenova/tomcat/logs/memory.dump ... Unable to create /indenova/tomcat/logs/memory.dump: El archivo ya existe 02-dic-2015 10:42:58 org.icepdf.core.pobjects.graphics.ImageStreamReference call ADVERTENCIA: Error loading image: 2915 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2537, Height=1, Width=7274, DecodeParms= {Columns=7274, Predictor=15, Colors=3}, ColorSpace=DeviceRGB} 2915 0 R java.lang.OutOfMemoryError: Java heap space at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.allocateByteArray(ConservativeSizingByteArrayOutputStream.java:168) at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.<init>(ConservativeSizingByteArrayOutputStream.java:40) at org.icepdf.core.pobjects.Stream.getDecodedStreamBytes(Stream.java:176) at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:362) at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:289) at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:73) at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:39) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662) 02-dic-2015 10:43:35 org.icepdf.core.pobjects.graphics.ImageStreamReference call ADVERTENCIA: Error loading image: 2928 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2654, Height=1, Width=7274, DecodeParms={Columns=7274, Predictor=15, Colors=3} , ColorSpace=DeviceRGB} 2928 0 R java.lang.OutOfMemoryError: Java heap space at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.allocateByteArray(ConservativeSizingByteArrayOutputStream.java:168) at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.<init>(ConservativeSizingByteArrayOutputStream.java:40) at org.icepdf.core.pobjects.Stream.getDecodedStreamBytes(Stream.java:176) at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:362) at org.icepdf.core.pobjects.ImageStream.getImage(ImageStream.java:289) at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:73) at org.icepdf.core.pobjects.graphics.ImageStreamReference.call(ImageStreamReference.java:39) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662) 02-dic-2015 10:43:35 org.icepdf.core.pobjects.graphics.ImageStreamReference call ADVERTENCIA: Error loading image: 2925 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2679, Height=1, Width=7274, DecodeParms= {Columns=7274, Predictor=15, Colors=3}, ColorSpace=DeviceRGB} 2925 0 R java.lang.OutOfMemoryError: Java heap space 02-dic-2015 10:43:27 org.icepdf.core.pobjects.graphics.ImageStreamReference call ADVERTENCIA: Error loading image: 2880 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2686, Height=1, Width=7274, DecodeParms={Columns=7274, Predictor=15, Colors=3} , ColorSpace=DeviceRGB} 2880 0 R java.lang.OutOfMemoryError: Java heap space 02-dic-2015 10:43:04 org.icepdf.core.util.content.NContentParser parse ADVERTENCIA: Error parsing content stream. java.lang.OutOfMemoryError: Java heap space at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.allocateByteArray(ConservativeSizingByteArrayOutputStream.java:168) at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.resizeArrayToFit(ConservativeSizingByteArrayOutputStream.java:162) at org.icepdf.core.io.ConservativeSizingByteArrayOutputStream.write(ConservativeSizingByteArrayOutputStream.java:77) at org.icepdf.core.pobjects.Stream.getDecodedStreamBytes(Stream.java:183) at org.icepdf.core.pobjects.ObjectStream.init(ObjectStream.java:64) at org.icepdf.core.pobjects.ObjectStream.loadObject(ObjectStream.java:86) at org.icepdf.core.util.LazyObjectLoader.loadObject(LazyObjectLoader.java:111) at org.icepdf.core.util.Library.getObject(Library.java:155) at org.icepdf.core.pobjects.Resources.getFont(Resources.java:140) at org.icepdf.core.util.content.AbstractContentParser.consume_Tf(AbstractContentParser.java:767) at org.icepdf.core.util.content.NContentParser.parseText(Unknown Source) at org.icepdf.core.util.content.NContentParser.parse(Unknown Source) at org.icepdf.core.pobjects.Page.init(Page.java:384) at org.icepdf.core.pobjects.Document.getPageDimension(Document.java:918) at com.indenova.server.documentViewer.DocumentViewerInterfaceImpl.fillPageSizes(DocumentViewerInterfaceImpl.java:1253) at com.indenova.server.documentViewer.DocumentViewerInterfaceImpl.getCacheFiles(DocumentViewerInterfaceImpl.java:1198) at com.indenova.server.documentViewer.DocumentViewerInterfaceImpl.getViewerData(DocumentViewerInterfaceImpl.java:337) at sun.reflect.GeneratedMethodAccessor581.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:163) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:206) 02-dic-2015 10:48:52 org.quartz.impl.jdbcjobstore.JobStoreSupport recoverMisfiredJobs INFO: Handling 4 trigger(s) that missed their scheduled fire-time. 02-dic-2015 10:46:39 org.icepdf.core.pobjects.graphics.ImageStreamReference call ADVERTENCIA: Error loading image: 2940 0 R Image stream= {BitsPerComponent=8, Filter=FlateDecode, Subtype=Image, Length=2764, Height=1, Width=7274, DecodeParms= {Columns=7274, Predictor=15, Colors=3} , ColorSpace=DeviceRGB} 2940 0 R java.lang.OutOfMemoryError: Java heap space I don't have a sample document, I'm just seeing those stacktraces in the log.
        Hide
        Patrick Corless added a comment -

        I've reworked the static nature of the ImageUtility class with the intent that it will be more friendly when called from multiple threads.

        Show
        Patrick Corless added a comment - I've reworked the static nature of the ImageUtility class with the intent that it will be more friendly when called from multiple threads.
        Hide
        Patrick Corless added a comment -

        Marking as fixed.

        Show
        Patrick Corless added a comment - Marking as fixed.

          People

          • Assignee:
            Patrick Corless
            Reporter:
            Yassine El Bouamri
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: