ImageMagickのバグ CPUが高負荷になる問題



仕事でImageMagickを使用していたんですがCPUにかなりの高負荷が発生していました。

調べたところImageMagickにバグがあるらしいのです・・・orz
ImageMagickはマルチCPU環境ではバグのためCPUが高負荷になる。

これはOpenMPというマルチプロセス処理の使い方がImageMagick内で間違った使い方をされているかららしい。
そのため不要な処理を何回も行ってしまいCPUに高負荷がかかる。

ImageMagickバージョン出力コマンド
convert -version
出力内容
Version: ImageMagick 6.8.4-6 2013-04-03 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: jpeg zlib

改善方法

ImageMagickのOpenMPを無効化する。

原因となるOpenMPを無効化することで、CPUの負荷が抑えられとのこと。
なのでImageMagickを無効化して再インストしてください。

メモ
ImageMagickのバージョンをQ16版ではなくQ8版を使用するとCPUの消費量が30%抑えられる。
※Q8、Q16の違い
Q8:24/32ビットピクセル
Q16:48/64ビットピクセル

PHPでの簡単対処方法

マジックナンバーを使用してスレッド数を制限しましょう!
// 6はImageMagickのマジックナンバー スレッド数の制限を意味します。
// 1は使用するCPU数
IMagick::setResourceLimit(6, 1);
実際検証してみましたが、OpenMP無効にしても効果がなくて困りました。
代わりにマジックナンバーを一行挿入しただけでCPUの使用率が大幅ダウン!
OpenMP無効化してビルドした意味がない・・・orz
同じように困っている方がいたらまずマジックナンバーを試してみてください。


コメントを残す