AEM se bloque avec l'erreur OutOfMemoryError après le chargement d'un PDF provoqué par Oracle JVM

Problème

Une fois certains fichiers PDF transférés, l’instance AEM se bloque.  Dans les fichiers journaux, l'erreur OutOfMemoryError est observée.  Dans les images mémoire de threads, vous observez des threads semblables à celui ci-dessous montrant des threads bloqués dans le code JVM sun.java2d.cmm.lcms.LCMS.createNativeTransform :

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

Environnement

AEM 6.x utilisant JDK 8

Cause

Ce cas de figure a été observé dans le traitement d'un PDF dans AEM (CQ-4202164) grâce à un problème d'Oracle JVM.

Résolution

Sur les systèmes Windows et Mac utilisant Oracle JVM :

En cas d'utilisation de Oracle JVM sous Windows ou Mac, configurez Java pour employer KCMS API hérité au lieu de LCMS.  Un problème causant cet échec dans JDK8 sous Linux a été constaté.

Modifier le script de démarrage AEM et ajouter ce paramètre JVM à la variable CQ_JVM_OPTS :

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

par exemple (extrait de code du script de démarrage) :

# 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

autres solutions (pour tous les systèmes d’exploitation)

A. Effacez les tâches de processus de mise à jour de ressources

  1. Accéder à http://host:port/crx/de/index.jsp et se connecter en tant qu'utilisateur admin.
  2. Parcourez en suivant ce chemin où {slingid} est l'ID Sling d'une instance AEM
    /var/eventing/jobs/assigned/{slingid}/com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  3. Cliquez avec le bouton droit de la souris et supprimez le nœud com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  4. Enregistrer.
  5. Relancez AEM.

Cette opération supprime toutes les Tâches Sling actives pour les fichiers PDF qui ne sont pas en train de boguer AEM.

B. Installer l'outil de ligne de commande de pixellisation PDF

  1. Téléchargez ce fichier zip [1] sur le serveur AEM.

  2. Décompresser le fichier zip dans un nouveau dossier sur le serveur.

  3. Transférez un fichier PDF sur le serveur dans le même dossier que celui où le fichier zip a été extrait.

  4. Exécuter cette commande dans ce fichier pour s'assurer que la pixellisation par ligne fonctionne (remplacer pdffilename.pdf par le nom du document PDF).

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

    La sortie doit être comme suit :

    Total time in image conversion (in ms): 163
    Total time (in ms): 896. Time to initialize: 12. Time for conversion: 884
  5. En supposant que la pixellisation fonctionne correctement sur la ligne de commande, suivez les étapes décrites dans cet article pour la configurer afin de l'utiliser dans AEM.

  6. En plus des étapes sur cette page, modifiez également celle du processus de mise à jour de gestion des actifs numériques (DAM) Pixellisation de rendu d'aperçu d'image PDF/AI. Supprimer application/pdf de la liste de types MIME.

  7. Cliquez sur Enregistrer pour enregistrer le modèle de processus.

  8. Essayez maintenant de soumettre des PDF : les rendus sont générés rapidement et sans l'utilisation élevée de mémoire.

 Adobe

Recevez de l’aide plus rapidement et plus facilement

Nouvel utilisateur ?

Adobe MAX 2024

Adobe MAX
La conférence sur la créativité

Du 14 au 16 octobre à Miami Beach et en ligne

Adobe MAX

La conférence sur la créativité

Du 14 au 16 octobre à Miami Beach et en ligne

Adobe MAX 2024

Adobe MAX
La conférence sur la créativité

Du 14 au 16 octobre à Miami Beach et en ligne

Adobe MAX

La conférence sur la créativité

Du 14 au 16 octobre à Miami Beach et en ligne