2011-12-19 36 views
7

Vì một số lý do xử lý hình ảnh (carrierwave + minimagick) ngừng hoạt động khoảng một tuần sau khi bắt đầu dịch vụ. Không có sự gia tăng bất thường về lưu lượng truy cập hoặc quá trình tải lên. Khi lỗi ENOMEM xảy ra, mọi thứ dường như 'khóa' và mọi quá trình sau đều không thành công.Không thể cấp phát bộ nhớ

Làm cách nào tôi có thể 'giải cứu' hệ thống khi nó ở trong hành vi đó hoặc thậm chí ngăn điều này xảy ra?

Một số lỗi:

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' 

Bộ nhớ và không gian trao đổi thông tin:

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

Version thông tin:

  • Rails 3.0.6
  • ruby ​​1.9.2p290
  • Apache 2.2.14
  • hành khách 3.0.9

Cảm ơn bạn!

+1

Một loạt các rò rỉ bộ nhớ đã được sửa trong ruby ​​1.9.3. Tôi muốn đề nghị nâng cấp và xem liệu điều đó có giúp ích gì không. http://svn.ruby-lang.org/repos/ruby/tags/v1_9_3_0/ChangeLog – Thilo

+0

Cảm ơn bạn Thilo! Vì bộ nhớ cập nhật đang được xử lý tốt hơn rất nhiều. – Florian

Trả lời

1

Tôi không thể tìm thấy bản sửa lỗi phù hợp, nhưng khi tôi khởi động lại bằng cách sử dụng capistrano (cap deploy:restart) mọi thứ bắt đầu chạy lại.

tôi sử dụng Ruby 1.9.3p194 (2012/04/20 sửa đổi 35410)

Vấn đề bắt đầu khi tôi sử dụng mini_magick trong Carrierwave để thao tác!

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

log của tôi:

{Không thể cấp phát bộ nhớ - xác định -ping /tmp/mini_magick20121019-3337-pg50p9.jpg chia sẻ/bó/ruby ​​/ 1.9.1/đá quý/subexec-0.2.1/lib/subexec.rb: 71: in spawn' shared/bundle/ruby/1.9.1/gems/subexec-0.2.1/lib/subexec.rb:71:in đẻ trứng ' được chia sẻ/bundle/ruby ​​/ 1.9.1/gems/subexec-0.2.1/lib/subexec.rb: 55: in run!' shared/bundle/ruby/1.9.1/gems/subexec-0.2.1/lib/subexec.rb:41:in run ' được chia sẻ/bundle/ruby ​​/ 1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb : 405: trong run' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:399:in run_command ' chia sẻ/bó/ruby ​​/ 1.9.1/đá quý/mini_magick-3.4/lib/mini_magick.rb: 198: trong valid?' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:163:in tạo' chia sẻ/bó/ruby ​​/ 1.9.1/đá quý /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 khối mở ' chia sẻ/bundle/ruby ​​/ 1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb: 133: in open' shared/bundle/ruby/1.9.1/gems/mini_magick-3.4/lib/mini_magick.rb:133:in open' được chia sẻ/bundle/ruby ​​/ 1.9.1/gems/carrierwave-0.6.2/lib/carrierwave/processing/mini_magick.rb: 245: in `thao tác! '

1

Tôi tin rằng đây là vấn đề tương tự như được nêu tại đây.Các đá quý khác nhau, nhưng cùng một hiệu lực: http://adamniedzielski.github.io/blog/2014/02/05/fighting-paperclip-errno-enomem-error/

Bản cập nhật của bài viết này là "Để tạo quy trình con, bộ nhớ trống phải lớn hơn bộ nhớ do quá trình cha mẹ thực hiện". Điều này khuyến cáo sử dụng giống cây dương để tránh vấn đề này. Điều này dường như không được cung cấp trong Minimagick, do đó, một số loại bản vá hoặc giải pháp thay thế sẽ được yêu cầu.

Các vấn đề liên quan