ImageMagick(Ruby 1.9.3/Passenger 4.0.4/Rails 3.2/rmagick 2.3.11/ImageMagick 6.7.9-10)を使って画像処理をしているプロセス(Passenger)が固まってレスポンスを返さない現象が発生していました。
エラーを返すならわかるのですが、プロセスが固まるとなると、フロントにあるHTTPサーバ(Apache/prefork)も応答できずに固まり、リクエストは次々とくるのでプロセスはどんどん増えていくというとても恐ろしいことになります。
■ やったこと
- ImageMagickをソースからインストール
- ghostscriptがインストールされていない
- yumなどのパッケージ管理ツールからImageMagickをインストールすると依存関係でghostscriptがインストールされる(と思う)
- rmagickでフォントを使ってテキストを描画
■ エラーメッセージ
1回目は、以下のようなエラーが出ます。2回目は無限ループが発生します。
Magick::ImageMagickError (Postscript delegate failed `/tmp/magick-Zb2G2URF': No such file or directory @ error/ps.c/ReadPSImage/833: `(null)')
■ 解決策とまとめ
ググると、ghostscript関連のエラーのようですので、ghostscriptをインストールしたところ、問題は発生しなくなりました。
- 当たり前のことですが、ソースからインストールする場合は依存関係に注意(他にもfreetypeを入れ忘れたり・・・)
- 開発サーバでは、本現象は発生せず(開発サーバにはいろいろ入れるので、ghostscriptもすでに入っていた)
ソースからインストールする前に、yum deplistとかで依存関係をチェックすればこういうミスを減らせるかなぁ・・・。