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
同じように困っている方がいたらまずマジックナンバーを試してみてください。
«前の記事:PCの画面を録画してGIFアニメーションにする「GifCam」世界中のサイバー攻撃をリアルタイムに表示する地図:次の記事»