Problem

Nach dem Hochladen bestimmter PDFs stürzt die AEM-Instanz ab.  In den Protokolldateien sehen Sie OutOfMemoryError.  In den Thread-Sicherheitskopien sehen Sie Threads wie den weiter unten, der im JVM-Code sun.java2d.cmm.lcms.LCMS.createNativeTransform hängengebliebene Threads anzeigt:

"JobHandler: /etc/workflow/instances/server0/2017-02-16/update_asset_833:/content/dam/geometrixx/documents/Test.pdf/jcr:content/renditions/original" #168 daemon prio=1 os_prio=0 tid=0x00007ff525c59800 nid=0x1ab7 runnable [0x00007ff3feffc000]
   java.lang.Thread.State: RUNNABLE
    at sun.java2d.cmm.lcms.LCMS.createNativeTransform(Native Method)
    at sun.java2d.cmm.lcms.LCMS.createTransform(LCMS.java:156)
    at sun.java2d.cmm.lcms.LCMSTransform.doTransform(LCMSTransform.java:155)
    - locked <0x000000077e9ae718> (a sun.java2d.cmm.lcms.LCMSTransform)
    at sun.java2d.cmm.lcms.LCMSTransform.colorConvert(LCMSTransform.java:268)
    at java.awt.image.ColorConvertOp.ICCBIFilter(ColorConvertOp.java:355)
    at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:282)
    at com.adobe.internal.pdftoolkit.image.ARGBImage.convertToRGB(ARGBImage.java:340)
    at com.adobe.internal.pdftoolkit.image.ARGBImage.handleICCColorSpace(ARGBImage.java:177)
    at com.adobe.internal.pdftoolkit.image.ARGBImage.convertToRGB(ARGBImage.java:310)
    at com.adobe.internal.pdftoolkit.image.ARGBImage.access$1300(ARGBImage.java:59)
    at com.adobe.internal.pdftoolkit.image.ARGBImage$ARGBTilesIterator.ConvertToRGB(ARGBImage.java:587)
    at com.adobe.internal.pdftoolkit.image.ARGBImage$ARGBTilesIterator.hasNext(ARGBImage.java:640)
    at com.adobe.internal.pdftoolkit.services.rasterizer.impl.RasterContentImageItem.writeToDisplayArea(RasterContentImageItem.java:211)
    at com.adobe.internal.pdftoolkit.services.rasterizer.impl.RasterDocument.createPage(RasterDocument.java:131)
    at com.adobe.internal.pdftoolkit.services.rasterizer.impl.PDFToRasterConverter.toBufferedImage(PDFToRasterConverter.java:127)
    at com.adobe.internal.pdftoolkit.services.rasterizer.PageRasterizer.next(PageRasterizer.java:98)
    at com.day.cq.dam.handler.standard.pdf.PdfHandler.getImage(PdfHandler.java:583)
    at com.day.cq.dam.handler.standard.pdf.PdfHandler.getImage(PdfHandler.java:546)
    at com.day.cq.dam.core.impl.cache.CQBufferedImageCache.getImage(CQBufferedImageCache.java:116)
    at com.day.cq.dam.core.impl.gfx.CommonsGfxRenderer.createImageLayer(CommonsGfxRenderer.java:460)
    at com.day.cq.dam.core.impl.gfx.CommonsGfxRenderer.createLayer(CommonsGfxRenderer.java:138)
    at com.day.cq.dam.core.impl.gfx.CommonsGfxRenderer.render(CommonsGfxRenderer.java:91)
    at com.adobe.cq.gfx.impl.GfxImpl.render(GfxImpl.java:94)
    at com.day.cq.dam.core.impl.RenditionMakerImpl$PlanBasedTemplate.apply(RenditionMakerImpl.java:127)
    at com.day.cq.dam.core.impl.RenditionMakerImpl.generateRenditions(RenditionMakerImpl.java:184)
    at com.day.cq.dam.core.process.CreateThumbnailProcess.createThumbnails(CreateThumbnailProcess.java:119)
    at com.day.cq.dam.core.process.ThumbnailProcess.execute(ThumbnailProcess.java:76)
    at com.day.cq.workflow.compatibility.CQWorkflowProcessRunner.execute(CQWorkflowProcessRunner.java:93)
    at com.adobe.granite.workflow.core.job.HandlerBase.executeProcess(HandlerBase.java:184)
    at com.adobe.granite.workflow.core.job.JobHandler.process(JobHandler.java:234)
    at org.apache.sling.event.impl.jobs.JobConsumerManager$JobConsumerWrapper.process(JobConsumerManager.java:512)
    at org.apache.sling.event.impl.jobs.queues.JobQueueImpl.startJob(JobQueueImpl.java:303)
    - locked <0x00000005cd6dab40> (a org.apache.sling.event.impl.jobs.queues.JobExecutionContextImpl)
    at org.apache.sling.event.impl.jobs.queues.JobQueueImpl.access$100(JobQueueImpl.java:66)
    at org.apache.sling.event.impl.jobs.queues.JobQueueImpl$1.run(JobQueueImpl.java:238)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Umgebung

AEM 6.x mit JDK 8.

Ursache

Dies ist ein bekanntes Problem bei der Verarbeitung von PDFs mit AEM (CQ-4202164), welches durch ein Problem mit Oracle JVM verursacht wird.

Lösung

Auf Systemen mit Windows und Mac, die Oracle JVM einsetzen:

Wenn Sie Oracle JVM auf Windows oder Mac verwenden, konfigurieren Sie Java so, dass es das ältere KCMS API anstatt LCMS benutzt.   Es besteht ein bekanntes Problem, wodurch dies in JDK8 nicht unter Linux funktioniert.

Ändern Sie das AEM-Start-Skript und fügen Sie der Variable CQ_JVM_OPTS diesen JVM-Parameter hinzu:

-Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider

Ein Beispiel (Snippet des Start-Skripts):

# default JVM options
if [ -z "$CQ_JVM_OPTS" ]; then
        CQ_JVM_OPTS='-server -Xmx1024m -XX:MaxPermSize=256M -Djava.awt.headless=true -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider'
fi

Andere Lösungen (alle Betriebssysteme)

A. Löschen Sie die Update-Asset-Workflow-Sling-Aufträge

  1. Wechseln Sie zu http://host:port/crx/de/index.jsp und melden Sie sich als Benutzer mit Administratorrechten an.
  2. Navigieren Sie zu diesem Pfad, bei dem {slingid} die Sling-ID der AEM-Instanz darstellt
    /var/eventing/jobs/assigned/{slingid}/com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  3. Rechtsklicken Sie und löschen Sie den Knoten com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  4. Speichern.
  5. Starten Sie AEM neu.

Dadurch werden alle aktiven sling jobs für PDF-Dateien gelöscht, die AEM zum Abstürzen bringen.

B. Installieren Sie das PDF-Raster-Kommandozeilenwerkzeug

  1. Laden Sie diese ZIP-Datei [1] auf Ihren AEM-Server herunter.

  2. Entpacken Sie die ZIP-Datei in einem neuen Ordner auf dem Server.

  3. Laden Sie eine PDF-Datei auf den Server in denselben Ordner hoch, in den Sie die ZIP-Datei extrahiert haben.

  4. Führen Sie den folgenden Befehl in diesem Ordner aus, um zu überprüfen, ob das Raster funktioniert (ersetzen Sie pdffilename.pdf mit dem Dateinamen des PDF-Dokuments).

    /opt/aem/author62/rasterizer/PDFRasterizer -d -p 1 -s 1280 -t PNG -i pdffilename.pdf

    Die Ausgabe könnte wie folgt aussehen:

    Total time in image conversion (in ms): 163
    Total time (in ms): 896. Time to initialize: 12. Time for conversion: 884
  5. Sofern das Raster in der Kommandozeile funktioniert, folgen Sie den Schritten, die in diesem Artikel stehen, um es so zu konfigurieren, dass es in AEM funktioniert.

  6. Zusätzlich zu den Schritten auf dieser Seite müssen Sie auch das DAM-Aktualisierungs-Asset anpassen workflow step Rasterize PDF/AI Image Preview Rendition. Entfernen Sie application/pdf aus der Liste von MIME-Typen.

  7. Klicken Sie auf Speichern, um das Workflow-Modell zu sichern.

  8. Versuchen Sie jetzt, PDF-Dateien hochzuladen und die Wiedergaben werden schnell generiert, ohne dass dafür viel Speicher erforderlich ist.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie