प्रदर्शन की निगरानी एक सफल एप्लिकेशन को चलाने का एक महत्वपूर्ण हिस्सा है। कुछ . के प्रदर्शन को बताने के सबसे बुनियादी तरीकों में से एक हर बार ऐसा होने पर अवधि को मापना और उससे आंकड़े निकालना है।
माध्य
मूल्यों के संग्रह का माध्य या औसत यह देखने के लिए एक अच्छी शुरुआत है कि कुछ अच्छा या बुरा कैसे व्यवहार करता है। इसकी गणना विचाराधीन सभी मानों को जोड़कर और फिर घटनाओं की संख्या से विभाजित करके की जाती है।
रूबी में, माध्य प्रतिक्रिया समय की गणना इस प्रकार होगी:
def mean(array)
(array.sum.to_f / array.length).round(2)
end
durations = [1,2,3,4,5,6,7,8,9,0]
mean(durations) #=> 4.5
नोट :उदाहरण में, विभाजित करते समय अधिक सटीक परिणाम के लिए, हम कुल अवधि मान को फ़्लोट में डालते हैं। अन्यथा, रूबी 4
. लौटाते हुए, निकटतम इंटीजर में चक्कर लगा देगी इसके बजाय।
औसत
एक अन्य उपयोगी आँकड़ा माध्यिका है। हालांकि यह समान लगता है, लेकिन मूल्यों के संग्रह के माध्य और माध्यिका के बीच अंतर होता है।
माध्यिका वह मान है जो समुच्चय के ऊपरी आधे भाग को समुच्चय के निचले आधे भाग से अलग करता है।
विषम संख्या वाले मानों वाले डेटासेट के लिए, आप पहले मानों को क्रमबद्ध करके, फिर मध्य संख्या का चयन करके माध्यिका प्राप्त करते हैं। सम संख्याओं वाले सेट के लिए, उन्हें छाँटने के बाद, माध्यिका दो मध्य संख्याओं का माध्य होगा।
def median(array)
sorted_array = array.sort
length = sorted_array.length
if length.odd? # Middle number for odd arrays
sorted_array[length / 2]
else # Mean of two middle numbers
first_value = sorted_array[length / 2]
second_value = sorted_array[length / 2 - 1]
(first_value + second_value) / 2.to_f
end
end
# Even array
durations = [1,2,3,4,5,6,7,8,9,0]
median(durations) #=> 4.5
# Odd array
durations = [1,1,2,3,4,5,6,7,8,9,0]
median(durations) #=> 4
यह आँकड़ा यह देखने का एक अच्छा तरीका है कि क्या डेटा में भारी कमी है या लंबी पूंछ है।
durations = [1,2,3,4,5,2000]
median(durations) #=> 3.5
mean(durations) #=> 335.83
उपरोक्त अवधियों का माध्य 335.83
होगा 2000ms के सिंगल आउटलेयर के कारण। माध्यिका, जो केवल 3.5
. है , इंगित करता है कि एक तिरछा है।
डेटासेट के माध्य और माध्यिका दोनों की गणना करके, आप यह पता लगा सकते हैं कि क्या कोई बड़ा आउटलेयर या लंबी पूंछ है।
मतलब की समस्या
जबकि माध्य और माध्यिका प्रदर्शन के अच्छे संकेतक हैं, वे पूरी कहानी नहीं बताते हैं। यदि आप किसी वेबपेज का दस बार अनुरोध करते हैं, तो माध्य बहुत कम हो सकता है, लेकिन एक या अधिक अनुरोधों को पूरा होने में अभी भी बहुत लंबा समय लग सकता है।
नीचे दी गई छवि ऐपसिग्नल में एक निश्चित क्रिया के लिए 99वां (नीला) और 90वां (हरा) प्रतिशत और माध्य (लाल) दिखाती है। आप देख सकते हैं कि 99वें और 90वें माध्य से काफी दूर हैं और कुछ स्पाइक्स हैं। इसका मतलब यह है कि आपके औसत ग्राहक के पास अच्छा अनुभव होने के बावजूद, कभी-कभी एक उपयोगकर्ता ऐसा होता है जिसे पृष्ठ के प्रस्तुत होने के लिए लगभग दो गुना लंबा इंतजार करना पड़ता है। आदर्श रूप से, आप अपने सभी उपयोगकर्ताओं के लिए एक अधिक सुसंगत अनुभव बनाते हुए, इन सभी मूल्यों को एक-दूसरे के जितना संभव हो सके प्राप्त करना चाहेंगे।
उदाहरण के लिए, निम्नलिखित अवधि सेट को देखते हुए जहां 10 ग्राहक 100 मिलीसेकंड और 1 सेकंड के बीच की अवधि वाले पृष्ठ का अनुरोध करते हैं।
[100,100,100,100,100,100,100,100,100,1_000]
इसका परिणाम केवल 190ms
. का माध्य होगा जबकि एक यूजर को 1 सेकेंड के रिस्पांस टाइम का बेहद खराब अनुभव था। जब केवल माध्य को ट्रैक किया जाता है, तो यह सोचना आसान होता है कि आपकी वेबसाइट का प्रदर्शन बहुत अच्छा है, जबकि वास्तव में हर बार एक उपयोगकर्ता को एक भयानक अनुभव होता है।
ऊपर दिया गया उदाहरण केवल 10 अनुरोधों के लिए है, लेकिन कल्पना करें कि यदि आपके पास प्रति दिन एक हज़ार अनुरोध होते, तो इसका अर्थ यह होता कि उनमें से सौ उपयोगकर्ताओं को एक भयानक अनुभव हुआ।
प्रतिशत
मूल्यों के वितरण का बेहतर विचार देने के लिए, हम पर्सेंटाइल का उपयोग करते हैं। पर्सेंटाइल माध्यिका के समान होते हैं - एक संख्या जो डेटासेट में एक बिंदु को दर्शाती है जहां सेट का आधा हिस्सा संख्या से नीचे है और इसका आधा ऊपर है। पर्सेंटाइल इस अर्थ में समान हैं कि 20वें पर्सेंटाइल का मतलब है कि डेटासेट में 20% संख्याएं उस संख्या से नीचे हैं।
निम्नलिखित (सॉर्ट किए गए) सेट को देखते हुए:
[100,100,200,200,300,300,400,400,500,5_000]
यदि हम 20वां पर्सेंटाइल जानना चाहते हैं, तो हम इसकी गणना निम्न प्रकार से कर सकते हैं:सेट में 10 मान हैं। वांछित मान स्थिति 1 पर है (20.0 / 100 * 10 - 1
) क्योंकि हमारे सरणियाँ शून्य से शुरू होती हैं। चूंकि इस सरणी में समान मात्रा में आइटम हैं, इसलिए हमें इंडेक्स (2
. के बीच माध्य की गणना करनी होगी ) और इंडेक्स + 1 (3
) इसका परिणाम 150
. का मान होगा 20वें पर्सेंटाइल के लिए।
एक बहुत ही भोली रूबी कार्यान्वयन इस तरह दिखेगा:
def percentile(array, wanted_percentile)
sorted_array = array.sort
index = (wanted_percentile.to_f / 100) * sorted_array.length - 1
# Check if index is not a round number
if index != index.to_i
sorted_array.at(index.ceil)
elsif sorted_array.length.even?
first_value = sorted_array.at(index)
second_value = sorted_array.at(index + 1)
(first_value + second_value) / 2
else
sorted_array.at(index)
end
end
# An array with an odd amount of numbers
durations = [100,200,200,300,300,400,400,500,5_000]
percentile(durations, 20) #=> 100
percentile(durations, 90) #=> 500
percentile(durations, 95) #=> 5000, index is a fraction, 9.5 the rounded index is 10
# An array with an even amount of numbers
durations = [100,100,200,200,300,300,400,400,500,5_000]
percentile(durations, 20) #=> 150, average of index 1 & 2 `(100 + 200) / 2`
percentile(durations, 90) #=> 2750, average of index 8 & 9 `(500 + 5000) / 2
percentile(durations, 95) #=> 500, index is a fraction, 8.55 the index is 9
यह percentile
फ़ंक्शन हमारे median
. के समान दिखता है गणना और वास्तव में, median
50th
. के समान है शतमक.
durations = [1,2,3]
percentile(durations, 50) == median(durations) #=> true
AppSignal आपके एप्लिकेशन के लिए प्रदर्शन मीट्रिक जेनरेट करने के लिए उपरोक्त आँकड़ों का उपयोग करता है। हम न केवल माध्य/औसत पर भरोसा करते हैं बल्कि आउटलेयर दिखाने के लिए 90वें और 95वें पर्सेंटाइल की गणना करते हैं जो आपके अनुरोधों के वितरण का बेहतर विचार देते हैं। हमारे प्रदर्शन यात्रा पृष्ठ पर अधिक जानकारी प्राप्त करें।
विषमताएं
जिस तरह से पर्सेंटाइल और एवरेज की गणना की जाती है, उसके कारण कभी-कभी 90वां पर्सेंटाइल डिप माध्य से नीचे होना संभव है, उदाहरण के लिए, निम्नलिखित डेटासेट को देखते हुए:
durations = [1,1,1,1,1,1,1,1,1,1,2000]
percentile(durations, 90) #=> 1
mean(durations) #=> 182.73
इससे हमें एक mean
मिलेगा का 182.73
, और केवल 1
. का 90वां शतमक ।
अगर आपका मेट्रिक संग्रह सिस्टम केवल 90वां पर्सेंटाइल और माध्य दिखाता है, तो आप अभी भी यह पता लगाने में सक्षम होंगे कि अगर 90वां पर्सेंटाइल औसत से नीचे चला जाता है, तो आपके डेटासेट में कहीं न कहीं एक बड़ा आउटलेयर है।
<ब्लॉकक्वॉट>यदि आप इस लेख को पसंद कर रहे हैं, तो हमने रूबी (ऑन रेल्स) के प्रदर्शन के बारे में और भी बहुत कुछ लिखा है, हमारी रूबी प्रदर्शन निगरानी चेकलिस्ट देखें।
आप इस पोस्ट के लगभग 100% पर हैं
अभी के लिए बस इतना ही! एक अन्य पोस्ट में, हम इस बारे में बात करने जा रहे हैं कि कैसे हम क्वांटाइल्स का उपयोग करके अपने सभी ग्राहकों के अनुरोधों के लिए पर्सेंटाइल को कुशलतापूर्वक संग्रहीत और गणना करते हैं। यदि आपके पास आंकड़ों और एपीएम, त्रुटि ट्रैकिंग या प्रदर्शन निगरानी के बारे में कोई प्रश्न या टिप्पणी है, तो हमें ट्विटर @AppSignal या ईमेल के माध्यम से संपर्क करें।