Heroku

2013-01-17 18 views
11

पर असंगत H12 टाइमआउट्स को कैसे प्रोफ़ाइल करें मेरे उपयोगकर्ता हरोकू पर कभी-कभी अनुरोध टाइमआउट देख रहे हैं। दुर्भाग्य से मैं उन्हें लगातार पुन: पेश नहीं कर सकता जो उन्हें डीबग करने में वाकई मुश्किल बनाता है। प्रदर्शन में सुधार करने के लिए बहुत सारे अवसर हैं - उदा। प्रति अनुरोध डेटाबेस क्वेरी की बड़ी संख्या को कम करके और अधिक कैशिंग जोड़कर - लेकिन बिना प्रोफाइल के अंधेरे में एक शॉट है।Heroku

हमारे नए अवशेष विश्लेषण के अनुसार, कई अनुरोध सर्वर पर 1 से 5 सेकंड के बीच लेते हैं। मुझे पता है कि यह बहुत धीमा है, लेकिन यह टाइमआउट के लिए 30 सेकंड के करीब कहीं भी नहीं है।

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

मैं कैसे पता लगा सकता हूं कि इन विशेष मामलों में क्या हो रहा है? जैसे मैं कैसे देख सकता हूं कि टाइमआउट होने पर डेटाबेस में कितना समय व्यतीत हो रहा था, जब कोई त्रुटि नहीं होने पर डेटाबेस में खर्च होने के समय के विपरीत?

मेरे पास एक परिकल्पना यह है कि डेटाबेस कुछ मामलों में बंद हो जाता है; शायद पढ़ने और लिखने का एक संयोजन।

+0

क्या आपने लॉग देखा है?अगली बार जब समस्या होती है, तो तुरंत अपने कमांड प्रॉम्प्ट पर जाएं और 'heroku लॉग' दर्ज करें। त्रुटि से लॉग पोस्ट करने से हमें समस्या हल करने में मदद मिलेगी। –

+0

@BrianPetro मेरे पास लॉग हैं, लेकिन वे प्रत्येक मामले के लिए अलग हैं - यहां तक ​​कि एक ही पृष्ठ पर - क्योंकि यह हर समय एक अलग जगह को समाप्त करता है। यही कारण है कि मैं इसे डीबग करने के लिए एक और सामान्य तरीका देख रहा हूं। –

+0

आपको कुछ लॉग या सबसे प्रासंगिक कोड के साथ पोस्ट करने का अद्यतन करें। अन्यथा मुझे डर है कि मैं बहुत मदद नहीं कर सकता। –

उत्तर

0

आप लंबे समय से चल रहे अनुरोधों के साथ समस्या को स्पष्ट रूप से मार रहे हैं। http://artsy.github.com/blog/2013/02/17/impact-of-heroku-routing-mesh-and-random-routing/ देखें और न्यूरेलिक आरपीएम 3.5.7.5 9 में अपग्रेड करें - प्रतीक्षा समय मापने की सटीक रिपोर्ट की जाएगी।

7

आप पहले से ही यह देखा हो सकता है, लेकिन Heroku अनुरोध समय समाप्ति के बारे में कुछ अच्छी पृष्ठभूमि के साथ एक doc है।

यदि आपके अनुरोध लंबे समय से ले रहे हैं, और अनुरोधों को पूरा करने से पहले उन्हें सेवा देने वाली प्रक्रियाओं को मार नहीं दिया जा रहा है, तो उन्हें लेन-देन के निशान उत्पन्न करना चाहिए जो व्यक्तिगत लेनदेन के बारे में विवरण प्रदान करेंगे जो बहुत अधिक समय लेते हैं।

आप यूनिकॉर्न उपयोग कर रहे हैं, तो संभव है कि इस नहीं हो रहा है क्योंकि अनुरोध काफी लंबे समय है कि वे यूनिकॉर्न के timeout (जिसके बाद उन अनुरोधों सर्विसिंग कार्यकर्ताओं को जबरन मार डाला जाएगा, दे नहीं के खिलाफ कम पड़ रहा है ले जा रहे हैं नए रिलिक एजेंट में वापस रिपोर्ट करने के लिए पर्याप्त समय)।

  1. कॉन्फ़िगर rack-timeout मिडलवेयर Heroku के 30 टाइमआउट के नीचे एक समय समाप्ति के लिए:

    मैं एक दो कदम दृष्टिकोण सलाह देते हैं। यदि यह काम करता है, तो यह Timeout::Error उठाकर टाइमआउट से अधिक समय लेने वाले अनुरोधों को समाप्त कर देगा, और ऐसे अनुरोधों को नए अवशेष में लेनदेन के निशान उत्पन्न करना चाहिए।

  2. यदि यह कुछ भी नहीं पैदा करता है (जो यह हो सकता है, क्योंकि रैक-टाइमआउट रुबी के stdlib Timeout कक्षा पर निर्भर करता है, जिसमें some limitations है), तो आप यूनिकॉर्न अनुरोध को 60 के डिफ़ॉल्ट से टाइमआउट अप करने के लिए प्रयास कर सकते हैं (मान लीजिए कि आप यूनिकॉर्न का उपयोग कर रहे हैं)। सावधान रहें कि लंबे समय से चलने वाले अनुरोध इस मामले में लंबी अवधि के लिए यूनिकॉर्न कार्यकर्ता को जोड़ देंगे, जो आपकी साइट को और धीमा कर सकता है, इसलिए इसे अंतिम उपाय के रूप में उपयोग करें।
1

दो साल देर से यहाँ। मेरे पास रुबी के साथ न्यूनतम अनुभव है, लेकिन डैंजो के लिए गनिकोर्न के साथ यह मुद्दा यह है कि यह धीमी क्लाइंट को हेरोोकू पर सही तरीके से संभाल नहीं करता है क्योंकि अनुरोध पूर्व-बफर नहीं किए जाते हैं, जिसका अर्थ है कि एक सर्वर कनेक्शन को प्रतीक्षा (अवरुद्ध) छोड़ दिया जा सकता है। This might be a helpful article to you, हालांकि यह मुख्य रूप से गनिकोर्न और पायथन पर लागू होता है।