2013-04-20 3 views
18

पर कभी-कभी धीमे अनुरोध हम हेरोकू पर असंगत प्रदर्शन देख रहे हैं जो हालिया यूनिकॉर्न/बुद्धिमान रूटिंग मुद्दे से असंबंधित है।हरोकू

यह एक अनुरोध का एक उदाहरण है जो आमतौर पर ~ 150ms (और 20 बार में से 1 9 कितना समय लगता है) लेता है। आप देख सकते हैं कि इस अनुरोध पर इसमें लगभग 4 सेकंड लग गए, या परिमाण के 1 और 2 ऑर्डर के बीच।

enter image description here

कुछ बातें ध्यान रखें:

  • डेटाबेस टोंटी नहीं था, और यह केवल 25ms खर्च कर डाटाबेस प्रश्नों
  • हमारे पास पर्याप्त dynos की तुलना में अधिक है, इसलिए मुझे नहीं पता लगता है कि यह बाधा थी (20 डबल डिनोस प्रत्येक 5 कर्मचारियों के साथ यूनिकॉर्न चला रहे हैं, हमें प्रति मिनट केवल 1000 अनुरोध मिलते हैं, 150 एमएमएस का औसत प्रतिक्रिया समय, जिसका अर्थ है कि हमें सेवा करने में सक्षम होना चाहिए (60/0.150) * 20 * 5 = 40,000 अनुरोध प्रति मिनट। दूसरे शब्दों में जब इस माप के दौरान हमारे पास dynos पर 40x क्षमता थी लिया गया।

तो मुझे आश्चर्य है कि इन कभी-कभी धीमे अनुरोधों का कारण क्या हो सकता है। जैसा कि मैंने उल्लेख किया है, अजीब बात यह है कि यह लगभग 20 में से 1 अनुरोधों में होता है। एकमात्र चीज जो मैं सोच सकता हूं वह है कि बक्से पर शोर पड़ोसी समस्या है, या रूटिंग परत में असंगत प्रदर्शन है। अगर किसी के पास अतिरिक्त जानकारी या विचार हैं तो मैं उत्सुक होगा। धन्यवाद।

+0

यदि यह कोई सांत्वना है, तो मैं भी इसका अनुभव कर रहा हूं और इसके लिए एक एप्लिकेशन विशिष्ट कारण को ट्रैक करने में सक्षम नहीं हूं। शोर पड़ोसी सिद्धांत के लिए एक और डेटा बिंदु? –

+0

क्या आपने हेरोकू के साथ एक समर्थन टिकट की कोशिश की है? –

+0

लंबे समय बाद इसे फिर से संशोधित करना, यहां एक * पागल * सिद्धांत है: यह हैरोकू के "निष्पक्ष सीपीयू शेयर" और वर्चुअलाइजेशन के साथ ऐसा करने के लिए कुछ है। मेरे बिंदु को साबित करने के लिए, आप कोड का एक छोटा टुकड़ा लिख ​​सकते हैं, '/ test' url के लिए हैंडलर कहें। इसमें, कई लाखों की गिनती करें। बस सीपीयू जलाओ। यह * वह * 150 मिमी और कभी-कभी 4sec लेने के समाप्त होता है, तो यह Heroku है। –

उत्तर

9

मैं एक ऐसी ही समस्या अपने आप को अब तक का पीछा करते हुए किया गया है, बहुत ज्यादा नहीं भाग्य के साथ।

मुझे लगता है कि व्यवसाय का पहला क्रम न्यूरेलिक की सिफारिश करना होगा। इन मामलों में आपके लिए कुछ और जानकारी हो सकती है।

दूसरा, मेरा सुझाव है कि आप कतार के समय देखें: आपका अनुरोध कब तक कतारबद्ध था। इसके लिए न्यूरेलिक देखें, या अपने आप को "स्टार्ट टाइम" HTTP हेडर के साथ करें जो हेरोोक आपके आने वाले अनुरोध में जोड़ता है (बस अपने कतार समय के रूप में "प्रारंभ समय" कम करें() कम करें। किसी भी DNS में कॉल आप कर रहे हैं -

1) डीएनएस:

जब उन मुझे मेरे मामले में विफल रहा है, मैं कोई बात बिगड़ जाए सकता है, और यहाँ के साथ आ की कोशिश की एक (? अपरंपरागत अजीब) सूची है आपकै विचार? इसमें कुछ समय लग सकता है। डीबी होस्ट नाम Redis होस्ट नाम, बाह्य सेवा प्रदाताओं के समाधान के लिए भी DNS अनुरोध, आदि

2) के लिए लॉग प्रदर्शन - Heroku अपने सभी stdout उनके "Logplex" है, जो यह तो अपने खुद के परिभाषित logdrains लिए नालियों का उपयोग कर एकत्र करता है, Papertrail, आदि जैसी सेवाएं। इसके प्रदर्शन पर कोई दस्तावेज़ीकरण नहीं है, और आपकी प्रक्रिया से stdout लिखने के लिए लिखते हैं, सैद्धांतिक रूप से, अवधि के लिए, जबकि हेरोकू किसी भी बफर को फ्लश कर रहा है, वहां हो सकता है।

3) डीबी कनेक्शन प्राप्त करना - सुनिश्चित नहीं है कि आप किस ढांचे का उपयोग कर रहे हैं, लेकिन हो सकता है कि आपके पास एक कनेक्शन पूल है जिसे आप डीबी कनेक्शन प्राप्त कर रहे हैं, और इसमें समय लगता है? यह क्वेरी समय के रूप में दिखाई नहीं देगा, यह आपकी प्रक्रिया के लिए समय अवरुद्ध कर देगा।

4) Dyno प्रदर्शन - Heroku एक ऐड-ऑन सुविधा प्रिंट होगा कि, हर कुछ सेकंड, कुछ सर्वर मीट्रिक (लोड औसत, स्मृति) stdout गया है। मैंने उन लोगों को ग्राफ करने के लिए ग्रेफाइट का उपयोग किया और मेट्रिक्स और समय के बीच सहसंबंध की तलाश की जहां मैंने "स्पोरैडिक धीमे अनुरोध" के उदाहरणों को देखा। यह मेरी मदद नहीं करता है, लेकिन आपकी मदद कर सकता है :)

हमें बताएं कि आप किसके साथ आते हैं।

+2

हम न्यूरेलिक का उपयोग कर रहे हैं। हम कभी-कभी स्पाइक अनुरोध क्यूइंग समय http://cl.ly/image/112t2x1F3I1s देखते हैं, मुझे यकीन नहीं है कि क्यों हमें डायनोस पर क्षमता (20 डायनोस, प्रति कर्मचारी 5 श्रमिक, डबल डायनोस, प्रति ~ 1000 अनुरोध) मिनट)। संदिग्धों की आपकी सूची अच्छी लगती है। मुझे लगता है कि समस्या अभी भी रूटिंग परत में है लेकिन यह सिर्फ एक अनुमान है। –

+0

@ ब्रायन - जिज्ञासा से बाहर, आपके पास 1000 रिक/मिनट के लिए 20GB ऐप सर्वर क्यों हैं? यह केवल 16-17 रिक/सेकंड है। क्या आपको कभी-कभी 10x यातायात की विशाल स्पाइक्स मिलती हैं? (संपादित करें: कभी भी ध्यान न दें, मुझे एहसास हुआ कि आप सिक्का चलाते हैं ... भयानक बीटीडब्ल्यू, लेकिन यह देखने में आसान है कि पैमाने कहां आता है!) इसके अलावा, क्या आपने कभी धीमे अनुरोधों का कारण पता लगाया है? मुझे एक ही समस्या है (मूलभूत दृश्य के लिए प्रत्येक 3 अनुरोधों में से लगभग 1 (कोई डीबी एक्सेस नहीं) बहुत धीमी है) और यह मुझे पागल बनाता है। – orokusaki

संबंधित मुद्दे