Hochladen einer PDF führt zum Absturz von AEM-Java-Prozess

Problem

Wenn Sie bestimmte PDF-Dateien in AEM hochladen, ist die Nutzung des Speichers des Betriebssystem durch die JVM zu hoch.  Der Java-Prozess hängt sich auf oder stürzt ab.  Unter Linux beendet das Betriebssystem den Java-Prozess.

Thread-Sicherheitskopien zeigen ähnliche Threads, die eine hohe Beanspruchung der CPU verursachen:

"JobHandler: /etc/workflow/instances/server0/2017-03-08_4/update_asset_6:/content/dam/test.pdf/jcr:content/renditions/original" #3270 daemon prio=1 os_prio=-2 tid=0x0000000020802000 nid=0xc7d0 runnable [0x00000000396be000]
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 <0x00000000f55ab218> (a sun.java2d.cmm.lcms.LCMSTransform)
at sun.java2d.cmm.lcms.LCMSTransform.colorConvert(LCMSTransform.java:629)
at java.awt.color.ICC_ColorSpace.toRGB(ICC_ColorSpace.java:182)
at com.adobe.internal.pdftoolkit.color.ColorManager.convertICCToDeviceRGB(ColorManager.java:167)
at com.adobe.internal.pdftoolkit.pdf.graphics.impl.ColorSpaceCacheImpl.toRGB(ColorSpaceCacheImpl.java:175)
at com.adobe.internal.pdftoolkit.services.pdfParser.ParserUtils.preProcessAxialShading(ParserUtils.java:264)
at com.adobe.internal.pdftoolkit.services.pdfParser.ContentStreamParser.applyShading(ContentStreamParser.java:1713)
at com.adobe.internal.pdftoolkit.services.pdfParser.ContentStreamParser.sh(ContentStreamParser.java:1672)
at com.adobe.internal.pdftoolkit.pdf.content.processor.ShadingPatternOperator.process(ContentOperators.java:790)
at com.adobe.internal.pdftoolkit.pdf.content.processor.ContentStreamProcessor.process(ContentStreamProcessor.java:103)
at com.adobe.internal.pdftoolkit.services.pdfParser.PDFContentItemsList$PDFContentItemsListIterator.processObjects(PDFContentItemsList.java:176)
at com.adobe.internal.pdftoolkit.services.pdfParser.PDFContentItemsList$PDFContentItemsListIterator.hasNext(PDFContentItemsList.java:127)
at com.adobe.internal.pdftoolkit.services.rasterizer.impl.RasterDocument.createPage(RasterDocument.java:129)
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:592)
at com.day.cq.dam.handler.standard.pdf.PdfHandler.getImage(PdfHandler.java:555)
at com.day.cq.dam.core.process.CreatePdfPreviewProcess.execute(CreatePdfPreviewProcess.java:109)
at com.day.cq.workflow.compatibility.CQWorkflowProcessRunner.execute(CQWorkflowProcessRunner.java:93)
at com.adobe.granite.workflow.core.job.HandlerBase.executeProcess(HandlerBase.java:189)
at com.adobe.granite.workflow.core.job.JobHandler.process(JobHandler.java:244)
at org.apache.sling.event.impl.jobs.JobConsumerManager$JobConsumerWrapper.process(JobConsumerManager.java:500)
at org.apache.sling.event.impl.jobs.queues.JobQueueImpl.startJob(JobQueueImpl.java:291)
locked <0x00000000c91531e0> (a org.apache.sling.event.impl.jobs.queues.JobExecutionContextImpl)
at org.apache.sling.event.impl.jobs.queues.JobQueueImpl.access$100(JobQueueImpl.java:58)
at org.apache.sling.event.impl.jobs.queues.JobQueueImpl$1.run(JobQueueImpl.java:227)
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.2 mit Oracle Java 1.8

Lösung

A. Löschen Sie die Aktualisierungs-Elemente-Workflow-Sling-Jobs

  1. Gehen Sie auf http://host:port/crx/de/index.jsp und melden Sie sich als Administrator an.

  2. Navigieren Sie zu diesem Pfad, wo {slingid} die Sling-Identifikation der AEM-Instanz ist

    /var/eventing/jobs/assigned/{slingid}/com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  3. Klicken Sie mit der rechten Maustaste und löschen Sie den Knoten com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model

  4. Speichern

  5. AEM neu starten

Dadurch werden alle aktiven Sling-Jobs für PDF-Dateien gelöscht, die einen Absturz in AEM verursachen.

B. Installieren Sie das PDF-Raster-Kommandozeilen-Werkzeug

  1. Kontaktieren Sie den AEM-Kundenservice, um die Datei cq-dam-pdfrasterizer*.zip für Ihr Betriebssystem zu erhalten.

  2. Laden Sie die ZIP-Datei auf Ihren AEM-Server hoch

  3. Dekomprimieren Sie die ZIP-Datei in einen neuen Ordner auf dem Server

  4. Speichern Sie die PDF-Datei auf dem Server in demselben Ordner, in den Sie die extrahierte ZIP-Datei hochgeladen haben.

  5. Führen Sie diesen Befehl in diesem Ordner aus, um sicherzustellen, dass der Raster-Setzer funktioniert (ersetzen Sie pdffilename.pdf durch den 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
  6. Zusätzlich zu den Schritten auf dieser Seite müssen Sie auch den „DAM-Aktualisierungs-Element“-Workflow-Schritt „raster PDF/AI Bild Voransicht Wiedergabe“ modifizieren. Entfernen Sie „application/pdf“ aus der Liste der „MIME-Typen“

  7. Sofern der Raster-Setzer auf der Kommandozeile funktioniert, folgen Sie allen Schritten in diesem Artikel, um ihn so zu konfigurieren, dass er in AEM funktioniert

  8. Klicken Sie auf „Speichern“, um das Workflow-Modell zu speichern.

  9. Versuchen Sie jetzt, PDFs hochzuladen, und die Wiedergabe sollte sehr schnell und ohne viel Arbeitsspeicher zu nutzen generiert werdenWenn Sie jetzt versuchen, PDFs hochzuladen, sollten die Wiedergaben sehr schnell und ohne hohe Speicherauslastung erstellt werden.

Adobe-Logo

Bei Ihrem Konto anmelden