3

アップロードされたファイル(画像とpdfファイル)を処理するためにJava用のjMagickを使用しています。ほとんどの画像は問題なく動作しますが、大きな複数ページの PDF ファイルを別のサイズの画像に変換しようとすると、大量のシステム メモリ (200M の PDF ファイルで約 20G の物理メモリ) を消費し、最終的に失敗しました。濃度を 200 に設定しています。そうしないと画質が非常に悪く、出力画像の文字さえ読めないからです。以下は私が持っているコードです:

  ImageInfo info = new ImageInfo(inputFilePath);
  info.setDensity(200);
  MagickImage image = new MagickImage(info);
  MagickImage[] imageFrames = image.breakFrames();
  for (MagickImage frame : imageFrames) {
    ImageInfo frameInfo = new ImageInfo();
    MagickImage frameDisplay = frame;
    frameDisplay.setFileName(outputFile);
    frameDisplay.writeImage(frameInfo);
  }

Java ログにエラーや例外はありません。プロセスが停止しているだけです。/usr/share/ImageMagick-6.5.4/config/ で policy.xml を使用して、メモリ使用量を次のように制限しようとしました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
<!ELEMENT policy (#PCDATA)>
<!ATTLIST policy domain (delegate|coder|filter|path|resource) #IMPLIED>
<!ATTLIST policy name CDATA #IMPLIED>
<!ATTLIST policy rights CDATA #IMPLIED>
<!ATTLIST policy pattern CDATA #IMPLIED>
<!ATTLIST policy value CDATA #IMPLIED>
]>

<policymap>
    <policy domain="resource" name="memory" value="256MB"/>
</policymap>

しかし、どういうわけかうまくいかないようです。ImageMagick-6.5.4 を使用しています。アドバイスをいただければ幸いです。

4

1 に答える 1

2
<policymap>
    <policy domain="resource" name="memory" value="256MB"/>
</policymap>

このセクションを次のように更新してみてください。

<policymap>
    <policy domain="resource" name="memory" value="1000MB"/>
</policymap>

そしてさらに試みる。「JVMが再起動しました」と言ったのは、クラッシュしたという意味だと思います。おそらくOutOfMemory例外です。あなたが提供した情報では、誰も確実に言うことはできません.

于 2012-12-14T20:36:23.000 に答える