2012-11-13 54 views
7

पर एक रूबी प्रक्रिया क्यों अवरुद्ध होती है हमारे पास एक बड़ी रेल ऐप है और कुछ दिनों से, एक-एक करके, हमारी रूबी प्रक्रिया लूप में अवरुद्ध होती है और यात्री तक 100% सीपीयू खाती है सर्वर 502 इरॉस उठा रहा है।समझने के तरीके 100% सीपीयू

क्या आप इसे समझने के सर्वोत्तम तरीकों को जानते हैं?

मैंने नई अवशेष की कोशिश की है, लेकिन यह केवल प्रदर्शन सामग्री है, और हमारी त्रुटियां यह अनुमान लगाने की कोशिश करने के लिए बहुत अधिक हैं कि समस्या क्या है। (हम अनुरोध का एक बहुत एक दिन और UTF-8 BSON त्रुटियाँ के बहुत सारे है, क्योंकि हम UTF-8 यूआरएल का उपयोग कर रहे हैं)

का उपयोग करना:

  • रूबी 1.9.2p290 साथ 3.2.6
  • यात्री 3.0.13
  • MongoDB 2.0.1 Mongoid साथ 2.4.11
  • Nginx
  • FreeBSD 8,2

उत्तर

8

आपकी रूबी फंसे हुए कहां से पता लगाने का एक आसान तरीका है gdb चल रही प्रक्रिया और call rb_backtrace() पर संलग्न करना। वह मौजूदा स्टैक ट्रेस को stderr पर प्रिंट करेगा, जो संभवतः एक लॉग फ़ाइल को निर्देशित किया जाता है। यहां एक ब्लॉग पर मिले short walk through है। स्टैक ट्रेस आपको स्थानीयकृत करने में मदद करनी चाहिए जहां आपकी प्रक्रिया फंस गई है और आपको यह पता लगाने की अनुमति है कि कोड निरीक्षण के माध्यम से क्या हो रहा है या महत्वपूर्ण कोड पथ के आसपास लॉगिंग उपकरण जोड़कर।

अमन गुप्ता के पास रूबी हुक लाइब्रेरी gdb.rb पर एक जीडीबी है, मुझे कई बार काम मिल गया है।

+0

वाहू, ठीक वही, जो मैं खोज रहा था, धन्यवाद! – Hartator