ImageMagick で /tmp/magick-xxx というサイズの大きいファイルができたときの解決方法と policy.xml の設定変更

ImageMagick を利用中のサーバーで /tmp/magick-xxx というような名前のサイズの大きいファイルができたときの解決方法と policy.xml の設定変更についてご紹介します。

ImageMagick | イメージマジック

前提

ngx_small_light で構築した画像処理サーバーで、ImageMagick を使っているのですが、突然 Disk warning や alert が発生していました。

/tmp/magick-xxx ファイルの確認・削除手順

まず、df コマンドでディスクの空き容量を確認します。97% で残り 290MB でした…。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  7.4G  290M  97% /
devtmpfs        3.6G   20K  3.6G   1% /dev
tmpfs           3.6G     0  3.6G   0% /dev/shm

/tmp ディレクトリ以下に ImageMagick が出力した tmp ファイルがあることを確認します。

$ ls -lh /tmp/
total 2.0G
-rw------- 1 nginx    nginx    2.0G Mar  3 06:56 magick-9162ZVLalRUJc16h

問答無用で削除しましょう。

$ sudo rm /tmp/magick-9162ZVLalRUJc16h

ImageMagick の設定変更

ImageMagick の設定値を確認したところ Disk: unlimited でした。

$ identify -list resource
Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 15.31GP
  Memory: 7.1292GiB
  Map: 14.258GiB
  Disk: unlimited
  File: 768
  Thread: 4
  Throttle: 0
  Time: unlimited

/usr/local/etc/ImageMagick-6/policy.xml を以下のように修正しました。

<policymap>
  <policy domain="resource" name="map" value="0B"/>
  <policy domain="resource" name="disk" value="0B"/>
  <policy domain="resource" name="thread" value="1"/> <!-- 並列処理を無効にしたほうが画像リサイズは速い -->
</policymap>

policy.xml を修正後、すぐに設定が反映されていることを identify -list resource コマンドから確認できます。

$ identify -list resource              
Resource limits:
  Width: 214.7MP
  Height: 214.7MP
  Area: 15.31GP
  Memory: 7.1292GiB
  Map: 0B
  Disk: 0B
  File: 768
  Thread: 1
  Throttle: 0
  Time: unlimited

以上、ImageMagick が出力するファイルサイズの大きい tmp ファイルに悩まされていた現場からお送りしました。

参考情報