2012-02-29 7 views
8

पिछले हफ्ते हमने एक छोटी परियोजना को अपग्रेड किया जो रेल 3.0.2 पर रेल 3.2.2 पर चल रहा था, जो अपग्रेड करने के बाद भारी मेमोरी लीक/ब्लोट।रेल 3.0 से रेल 3.2 (रूबी 1.9.3 + यात्री)

अपग्रेड के कुछ समय बाद हमने मान्यता दी कि कभी-कभी, 2-3 बार दिन में, हम एक विशाल फ़्यूज़न यात्री प्रक्रिया (1-5 जीबी) देख रहे हैं।

हम फ़्यूज़न पैसेंजर 3.0.11 और रूबी 1.9.3-पी 0 चला रहे हैं। हमने बिना सफलता के विभिन्न रूबी संस्करण (1.9.2-पी 2 9 0 और 1.9.3-पी 125) की कोशिश की है।

बाद में, हमने Oink के साथ हमारे मेमोरी उपयोग को ट्रैक करने का प्रयास किया। दुर्भाग्यवश ओंक मेमोरी ब्लोट के कारण को नहीं दिखाता है - बड़ी प्रक्रियाएं अब लॉगफाइल पर नहीं लिखती हैं।

जब हम रेल 3.0.1 पर वापस आ गए थे तो समस्या समाप्त हो गई है। क्या किसी को भी ऐसी ही समस्याएं हैं? हमने वास्तव में संभावित मेमोरी लीक के लिए हमारे कोड की जांच की, जैसे कि बहुत से ActiveRecord उदाहरण, लेकिन कोई भी नहीं मिला।

क्या आपको लगता है कि यात्री के बजाय यूनिकॉर्न को आजमाने के लिए यह उचित है? या यह संभावना है कि हम एक ही समस्या में भाग लेंगे?

स्मृति रिसाव का पता लगाने के तरीके के बारे में कोई सुझाव स्वागत है। हमने पहले से ही न्यूज़ल सेट अप किया है, लेकिन यह मेमोरी रिसाव के बारे में विस्तृत जानकारी नहीं दिखाता है।

+1

हमने पैसेंजर को यूनिकॉर्न सेटअप द्वारा बदल दिया है और अब सिस्टम अपेक्षा के अनुसार काम करता है। मुझे नहीं लगता कि यह एक सामान्य यात्री समस्या थी या शायद पैसेंजर/आरवीएम (और शायद हमने इसे कैसे स्थापित/अपग्रेड किया) के साथ एक मुद्दा था। –

+0

क्या आप अपने यूनिकॉर्न सेटअप को साझा करना चाहते हैं? मुझे एक ही समस्या है, मेमोरी ओवरफ्लो को रोकने के लिए हर 6 घंटे सर्वर को पुनरारंभ करने की आवश्यकता है! –

+2

देर से उत्तर के लिए खेद है। खैर ... यूनिकॉर्न सेटअप साझा करना शायद यहां एक टिप्पणी के रूप में पोस्ट करने के लिए बहुत अधिक होगा। एक त्वरित Google खोज आपको मदद करनी चाहिए। शायद आप यहां से शुरू करें: https://github.com/blog/517-unicorn।असल में यह अपस्टर्न सर्वर के रूप में यूनिकॉर्न के साथ सिर्फ nginx है। यूनिकॉर्न सेटअप कॉन्फ़िगरेशन में बस एक साधारण यूनिकॉर्न.आरबी है .... हमें यात्री से स्विच करने के लिए शायद एक घंटा लगा। और एक और हमारे कैपिस्ट्रानो कॉन्फ़िगरेशन में यूनिकॉर्न परिनियोजन सामग्री जोड़ने के लिए। –

उत्तर

0

मुझे यह जानने में दिलचस्पी होगी कि यात्री-मेमोरी-आंकड़े क्या दिखाते हैं और यात्री MaxPoolSize यात्री PoolIdleTime और किसी अन्य यात्री सेटिंग के लिए आपके पास किस प्रकार की मेमोरी सेट है।

आपने यात्री को कैसे अपग्रेड किया?

आपका अपाचे सेटअप कैसा है? prefork या कार्यकर्ता?

मुझे लगता है कि आप गहरे लाल रंग का है कि यात्री का उपयोग करता है के चारों ओर एक आवरण में इस डालकर गरीब जीसी प्रदर्शन, उन्हें धुन करने का प्रयास को देख रहे हैं:

#!/bin/sh 
export RUBY_HEAP_MIN_SLOTS=600000 
export RUBY_GC_MALLOC_LIMIT=59000000 
export RUBY_FREE_MIN=200000 
exec "/usr/bin/ruby" "[email protected]" 

यह कुछ प्रदर्शन के मुद्दों आप सामान्य कारण में देख रहे हैं ठीक करना चाहिए गरीब रूबी जीसी डिफ़ॉल्ट करने के लिए।

+0

यह थोड़ी देर हो गया है क्योंकि हमें यह समस्या है। दुर्भाग्यवश मुझे अब यात्री कॉन्फ़िगरेशन नहीं पता है, लेकिन मुझे लगता है कि यह डिफ़ॉल्ट या अनुशंसित मान थे। हमने पैसेंजर को डिफ़ॉल्ट इंस्टॉल स्क्रिप्ट के साथ स्थापित किया है जो हमारे लिए nginx भी स्थापित करता है। जैसा कि मैंने उपरोक्त मेरी टिप्पणी में पहले ही लिखा है, हमने पैसेंजर/निगेंक्स के बजाय यूनिकॉर्न/एनजिनक्स का उपयोग करके समस्या का समाधान किया है। –

1

यदि यह Red Hat संगत लिनक्स है, तो आप SystemTap का उपयोग कर सकते हैं। मुझे यकीन नहीं है कि सिस्टमटैप डेबियन/उबंटू सिस्टम पर उपलब्ध है, अगर डीटीआरएस नामक वैकल्पिक विकल्प नहीं है। यहां कुछ लेख दिए गए हैं - मैं कई प्रतिक्रियाओं को ट्रैक करने में काफी सफल रहा हूं, हालांकि इनमें से कोई भी स्मृति समस्या नहीं थी (शायद आप एक एसटीपी स्क्रिप्ट पा सकते हैं जो आपके लिए चाल कर सकती है)। यहां पढ़ें:

http://lukas.zapletalovi.com/2012/02/peek-into-your-ruby-app-with-systemtap.html http://lukas.zapletalovi.com/2012/01/probing-ruby-apps-with-systemtap-in.html http://sourceware.org/systemtap/wiki/RubyMarker

पिछले लिंक जांच आप रूबी में SystemTaps में में घेरा जा सकता है पता चलता है। जीसी रन या मेमोरी आवंटन जैसे सोचते हैं, आपकी मदद कर सकते हैं। सौभाग्य!