問題点

特定の PDF をアップロードした後、AEM インスタンスがクラッシュします。ログファイルには、OutOfMemoryError が表示されます。スレッドダンプで、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)

環境

AEM 6.xJDK 8 を使用

原因

これは、Oracle JVM の問題が原因で発生する、AEM (CQ-4202164) の PDF 処理に関する既知の問題です。

解決策

Oracle JVM を使用している Windows および Mac システムの場合:

Windows または Mac で Oracle JVM を使用している場合は、LCMS ではなく従来の KCMS API を使用するように Java を設定します。  Linux 上の JDK8 で機能しない既知の問題があります。

AEM の開始スクリプトを変更し、この JVM パラメーターを CQ_JVM_OPTS 変数に追加します。

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

例えば、次のような(開始スクリプトのスニペット):

# 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

その他のソリューション(すべてのオペレーティングシステム)

A. アセットの更新ワークフロー Sling ジョブを消去する

  1. http://host:port/crx/de/index.jsp へ進み、アドミンユーザーとしてログイン
  2. {slingid}が AEM インスタンス
    /var/eventing/jobs/assigned/{slingid}/com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model のスリング ID であるこのパスを参照する
  3. com.adobe.granite.workflow.job.etc.workflow.models.dam.update_asset.jcr_content.model ノードを右クリックして削除します
  4. 保存します。
  5. AEM を再起動します。

これにより、AEM がクラッシュしている PDF のすべてのアクティブな sling ジョブが削除されます。

B. PDF Rasterizer コマンドラインツールをインストールする

  1. AEM server へこの zip ファイル [1]をダウンロードする。

  2. サーバー上の新しいフォルダーに解凍します。

  3. zip ファイルを圧縮した場所と同じフォルダー内のサーバーに PDF ファイルをアップロードします。

  4. ラスタライザーが機能していることを確認し、そのフォルダーのこのコマンドを実行します(pdffilename.pdf を PDF ドキュメントのファイル名で置き換えます)。

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

    出力は次のようになります:

    Total time in image conversion (in ms): 163
    Total time (in ms): 896. Time to initialize: 12. Time for conversion: 884
  5. コマンドラインでラスタライザが正常に動作すると仮定して、この記事の手順に従って AEM で動作するように設定します。

  6. このページの手順に加えて、DAM アップデートアセットワークフローステップラスタライズ PDF/AI イメージプレビューレンディションも設定しなくてはなりません。MIME タイプ
    のリストから application/pdf を削除します。

  7. ワークフローモデルを保存するために保存をクリックします。

  8. これで PDF をアップロードしようとすると、メモリー使用率が少ない状態でレンディションは高速に生成されます。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー