O AEM trava com o OutOfMemoryError após o upload do PDF causado pela Oracle JVM

Problema

Depois de carregar determinados PDFs, a instância do AEM falha.  Nos arquivos de log, você vê OutOfMemoryError.  Nos dumps de encadeamento, você vê encadeamentos como o abaixo, mostrando encadeamentos presos no código da 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)

Ambiente

AEM 6.x usando o JDK 8

Causa

É um problema conhecido com o processamento de PDF no AEM (CQ-4202164) causado por um problema da Oracle JVM.

Resolução

Nos sistemas Windows e Mac usando o Oracle JVM:

Se você estiver usando o Oracle JVM no Windows ou Mac, configure o Java para usar a API do KCMS herdada em vez do LCMS.  Há um problema conhecido que faz com que isso não funcione no JDK8 no Linux.

Modifique seu script de inicialização do AEM e inclua este parâmetro da JVM na variável CQ_JVM_OPTS:

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

Por exemplo (snippet do script de início):

# 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

Outras soluções (todos os sistemas operacionais)

A. Limpar as tarefas de lançamento do fluxo de trabalho do ativo de atualização

  1. Acesse http://host:port/crx/de/index.jsp e faça o login como usuário administrador.
  2. Navegue para este caminho em que {slingid} é o id da sling da instância do AEM
    /var/eventing/jobs/assigned/{slingid}/com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  3. Clique com o botão direito e exclua o nó com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model
  4. Salve.
  5. Reinicie o AEM.

Isso exclui todos os trabalhos de sling ativos para PDFs que estão bloqueando o AEM.

B. Instalar a ferramenta de linha de comando PDF Rasterizer

  1. Baixe este arquivo zip [1] para o seu servidor AEM.

  2. Descompacte o arquivo zip em uma nova pasta no servidor.

  3. Faça o upload de um arquivo PDF para o servidor na mesma pasta de onde você extraiu o arquivo zip.

  4. Execute este comando nessa pasta para garantir que o rasterizador funcione (substitua pdffilename.pdf pelo nome do arquivo do documento PDF).

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

    A saída deverá ser algo desse tipo:

    Total time in image conversion (in ms): 163
    Total time (in ms): 896. Time to initialize: 12. Time for conversion: 884
  5. Supondo que o rasterizador funcione bem na linha de comando, siga as etapas neste artigo para configurá-lo para funcionar no AEM.

  6. Além das etapas nessa página, você também deve modificar o Ativos de atualização do DAM etapa do fluxo de trabalho Rasterizar visualização de visualização de imagem PDF / AI. Remova application / pdf da lista de Tipos MIME.

  7. Clique em Save para salvar o modelo de fluxo de trabalho.

  8. Agora, tente fazer o upload de PDFs e as renderizações são geradas rapidamente e sem alta utilização de memória.

 Adobe

Receba ajuda com mais rapidez e facilidade

Novo usuário?

Adobe MAX 2024

Adobe MAX:
a conferência da criatividade

14 a 16 de outubro, Miami Beach e online

Adobe MAX

A conferência da criatividade

14 a 16 de outubro, Miami Beach e online

Adobe MAX 2024

Adobe MAX:
a conferência da criatividade

14 a 16 de outubro, Miami Beach e online

Adobe MAX

A conferência da criatividade

14 a 16 de outubro, Miami Beach e online