数千件の大量の画像ファイルを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 件のコメント:
コメントを投稿