2008年10月5日日曜日

Ruby ImageMagick RMagick メモリ不足で異常終了する Rubyガーベージコレクション

数千件の大量の画像ファイルをRMagick(ImageMagick)を使って
画像処理すると

#<Magick::ImageMagickError: Insufficient memory (case 4)
#<Magick::ImageMagickError: Insufficient memory (case 2)

RMagick: Memory allocation failed `Cannot allocate memory'.

と出てRubyが終了してしまう。
いろいろ調べてみましたら次のような記事が見つかりました。

RMagickにはメモリリークのバグがあるそうです。
主導でガーベージコレクションを走らせればメモリ不足にはならないようです。

def run_gc
fDisabled = GC.enable
GC.start
GC.disable if fDisabled
end

なるメソッドを作成し、適当に呼び出せばいいらしいです。
確かにガーベージコレクションを呼び出せば改善しました。

ん。。。これからすると、Rubyはガーベージコレクションの頻度が少ないのかなぁ。
メモリがいっぱいになってきたら勝手にガーベージコレクションが走るのが普通のような気がする。VisualBasicにしても、メモリが足りなくなったら急にガーベージコレクションをはじめて、急に速度が遅くなり往生した記憶があります。

ま。直ったからいいけど(^-^v


Ruby on Rails/メモリの問題とか

0 件のコメント: