Problema

Quando si caricano alcuni file PDF su AEM, l'utilizzo della memoria del sistema operativo da parte della JVM è troppo elevato. Il processo java si blocca o si interrompe. Su Linux, il sistema operativo arresta il processo java.

I dump di thread mostrano thread simili che causano un elevato utilizzo della CPU:

"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)

Ambiente

AEM 6.2 su Oracle Java 1.8

Risoluzione

A. Elimina gli sling job del flusso di lavoro della risorsa di aggiornamento

  1. Vai su http://host:port/crx/de/index.jsp e accedi come utente admin

  2. Sfoglia questo percorso dove {slingid} è l'ID sling dell'istanza AEM

    /var/eventing/jobs/assigned/{slingid}/com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  3. Fai clic con il pulsante destro del mouse ed elimina il nodo com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model

  4. Salva

  5. Riavvia AEM

Questo elimina tutti gli sling job attivi per i PDF che causano il crash in AEM.

B. Installa lo strumento a riga di comando PDF Rasterizer

  1. Contatta il Servizio clienti AEM per avere il file cq-dam-pdfrasterizer*.zip per il tuo sistema operativo

  2. Carica il file zip sul tuo server AEM

  3. Decomprimi il file zip in una nuova cartella sul server

  4. Carica un file PDF sul server nella stessa cartella in cui è stato estratto il file zip

  5. Esegui questo comando in quella cartella per assicurarti che il rasterizzatore funzioni (sostituire pdffilename.pdf con il nome del file del documento pdf)

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

    L'output dovrebbe essere una cosa del genere:

    Total time in image conversion (in ms): 163
    Total time (in ms): 896. Time to initialize: 12. Time for conversion: 884
  6. Oltre ai passaggi di quella pagina è necessario modificare anche il passaggio “Rasterize PDF/AI Image Preview Rendition” del flusso di lavoro “DAM Update Asset”. Rimuovi “application/pdf” dall'elenco dei “Mime Types”

  7. Supponendo che il rasterizzatore funzioni correttamente sulla riga di comando, segui tutti i passaggi di questo articolo per configurarlo in AEM

  8. Fai clic su “Salva” per salvare il modello di flusso di lavoro

  9. Ora prova a caricare i PDF e i rendering dovrebbero essere generati molto velocemente e senza un elevato utilizzo di memoria

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online