2011-12-19 15 views
7

किसी कारण से प्रसंस्करण छवियों (कैरियरवेव + मिनीमैजिक) सेवा शुरू होने के एक सप्ताह बाद काम करना बंद कर देता है। यातायात या अपलोड प्रक्रियाओं में कोई असामान्य वृद्धि नहीं है। एक बार 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 

संस्करण जानकारी:

  • रेल 3.0.6
  • माणिक 1.9.2p290
  • अपाचे 2.2.14
  • यात्री 3.0.9

धन्यवाद!

+1

रूबी 1.9.3 में मेमोरी लीक का एक गुच्छा तय किया गया है। मैं उन्नयन का सुझाव दूंगा और देख सकता हूं कि इससे मदद मिलती है या नहीं। http://svn.ruby-lang.org/repos/ruby/tags/v1_9_3_0/ChangeLog – Thilo

+0

धन्यवाद थिलो! चूंकि अद्यतन स्मृति को बहुत बेहतर तरीके से संभाला जा रहा है। – Florian

उत्तर

1

मुझे उचित फ़िक्स नहीं मिल रहा है, लेकिन एक बार जब मैं capistrano (cap deploy:restart) का उपयोग करके पुनरारंभ करता हूं तो चीजें फिर से चलने लगती हैं।

मैं रूबी 1.9.3p194 (2012-04-20 संशोधन 35,410) का उपयोग

समस्या जब मैं हेरफेर करने के लिए Carrierwave में mini_magick का उपयोग शुरू होता है!

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 ' साझा/बंडल/रूबी/1.9.1/रत्न/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 रन में ' साझा/बंडल/रूबी/1.9.1/रत्न/मिनी_मैजिक-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 खुला' साझा/बंडल/रूबी/1.9.1/रत्न/कैरियरवेव-0.6.2/lib/carrierwave/प्रसंस्करण/mini_magick.rb: 245: में 'हेरफेर!'

1

मेरा मानना ​​है कि यह यहां दस्तावेज जैसा ही मुद्दा है।विभिन्न रत्न, लेकिन एक ही प्रभाव: http://adamniedzielski.github.io/blog/2014/02/05/fighting-paperclip-errno-enomem-error/

इस आलेख का उछाल यह है कि "बाल प्रक्रिया बनाने के लिए, मूल स्मृति द्वारा ली गई स्मृति से मुक्त स्मृति अधिक होनी चाहिए।" यह समस्या से बचने के लिए पॉजिक्स-स्पॉन के उपयोग की सिफारिश करता है। यह मिनीमैजिक में उपलब्ध नहीं प्रतीत होता है, इसलिए किसी प्रकार का पैच या वर्कअराउंड आवश्यक होगा।