2011-12-19 157 views
7

由於某些原因,處理圖像(carrierwave + minimagick)在服務啓動約一週後停止工作。流量或上傳流程沒有異常增加。一旦發生ENOMEM錯誤,一切似乎都會「鎖定」,並且任何後續進程也會失敗。無法分配內存

一旦處於這種行爲狀態,甚至可以防止這種情況發生,我該如何「拯救」系統?

一些錯誤:

Errno::ENOMEM (Cannot allocate memory - export LANG=C && identify -ping /tmp/mini_magick20111219-18047-1dhmawm.jpg 2>&1): 
    app/uploaders/photo_uploader.rb:70:in `custom_thumbnail' 
    app/controllers/upload_controller.rb:186:in `process_upload' 
    app/middleware/flash_session_cookie_middleware.rb:17:in `call' 
    app/middleware/flash_session_cookie_middleware.rb:17:in `call' 


Errno::ENOMEM (Cannot allocate memory - export LANG=C && mogrify -format jpg /tmp/mini_magick20111219-18047-1c43qpf.jpg 2>&1): 
    app/controllers/upload_controller.rb:186:in `process_upload' 
    app/middleware/flash_session_cookie_middleware.rb:17:in `call' 
    app/middleware/flash_session_cookie_middleware.rb:17:in `call' 

... 
... 

Errno::ENOMEM (Cannot allocate memory - export LANG=C && mogrify -resize "120x180" -gravity "Center" -extent "120x120" /tmp/mini_magick20111219-18047-155ofje.jpg 2>&1): 
    app/controllers/upload_controller.rb:186:in `process_upload' 
    app/middleware/flash_session_cookie_middleware.rb:17:in `call' 
    app/middleware/flash_session_cookie_middleware.rb:17:in `call' 

內存和交換空間信息:

Mem: 8193476k total, 7907152k used, 286324k free,  5968k buffers 
Swap: 12396808k total, 9494924k used, 2901884k free, 180308k cached 

版本信息:

  • 的Rails 3.0.6
  • 紅寶石1.9.2p290
  • 的Apache 2.2.14
  • 乘客3.0.9

謝謝!

+1

在Ruby 1.9.3中已經修復了一堆內存泄漏。我會建議升級,看看是否有幫助。 http://svn.ruby-lang.org/repos/ruby/tags/v1_9_3_0/ChangeLog – Thilo 2011-12-19 19:57:10

+0

謝謝Thilo!由於更新內存的處理要好得多。 – Florian 2011-12-21 17:20:31

回答

1

我找不到合適的修復方法,但是一旦我重新使用capistrano(cap deploy:restart),事情就會重新開始。

我使用Ruby 1.9.3p194(2012-04-20修訂35410)

,當我使用mini_magick在Carrierwave到操縱的問題開始!

def strip 
    manipulate! do |img| #where problem occurs 
     img.strip 
     img = yield(img) if block_given? 
     img 
    end 
    end 

我的日誌:

{無法分配內存 - 識別-ping /tmp/mini_magick20121019-3337-pg50p9.jpg 共享/包/紅寶石/ 1.9.1 /寶石/ subexec-0.2.1/lib/subexec.rb:71: spawn' shared/bundle/ruby/1.9.1/gems/subexec-0.2.1/lib/subexec.rb:71:in spawn' shared/bundle/ruby​​/1.9.1/gems/subexec-0.2.1/lib/subexec.rb:55: run!' shared/bundle/ruby/1.9.1/gems/subexec-0.2.1/lib/subexec.rb:41:in run ' shared/bundle/ruby​​/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb :405:在 run' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:399:in run_command ' 共享/束/紅寶石/ 1.9.1 /寶石/ mini_magick-3.4/LIB/mini_magick.rb:198:在 valid?' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:163:in 創建' 共享/束/紅寶石/ 1.9.1 /寶石/mini_magick-3.4/lib/mini_magick.rb:73:in read' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:134:in 塊在開放 ' 共享/束/紅寶石/ 1.9.1 /寶石/ mini_magick-3.4/LIB/mini_magick.rb:133: open' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:133:in 開放' shared/bundle/ruby​​/1.9.1/gems/carrierwave-0.6.2/lib/carrierwave/processing/mini_magick.rb:245: `manipulate!'