परफ़ॉर्मेंस टेस्टिंग क्या है?
परफ़ॉर्मेंस टेस्टिंग यह जाँचती है कि कोई सिस्टम किसी खास वर्कलोड में कैसा व्यवहार करता है: वह कितनी तेज़ी से जवाब देता है, कितनी रिक्वेस्ट संभाल सकता है, समय के साथ स्थिर रहता है या नहीं, और सीमा से आगे धकेलने पर क्या होता है। फ़ंक्शनल टेस्ट "क्या यह काम करता है?" का जवाब देते हैं; परफ़ॉर्मेंस टेस्ट "क्या यह लॉन्च के दिन सुबह 9 बजे दस हज़ार यूज़र के साथ भी काम करता है?" का।
यह गाइड परफ़ॉर्मेंस टेस्ट के प्रकार और हर एक कब इस्तेमाल होता है, कौन-सी मेट्रिक्स मापें और उन्हें कैसे पढ़ें, API या वेब एप्लिकेशन के पहले टेस्ट का प्रैक्टिकल प्लान, और लोड चलाने वाले टूल्स समझाती है।
परफ़ॉर्मेंस टेस्ट के प्रकार
- लोड टेस्टिंग — अपेक्षित, रियलिस्टिक ट्रैफ़िक (औसत और पीक) यह पुष्टि करने के लिए कि सिस्टम सामान्य हालात में रिस्पॉन्स-टाइम और एरर लक्ष्य पूरे करता है।
- स्ट्रेस टेस्टिंग — अपेक्षित पीक से आगे ट्रैफ़िक बढ़ाना जब तक कुछ टूट न जाए, ताकि सीमा पता चले और दिखे कि फ़ेलियर शालीन है (धीमा, 503) या विनाशकारी (क्रैश, डेटा करप्शन)।
- स्पाइक टेस्टिंग — कम से बहुत ज़्यादा ट्रैफ़िक की अचानक छलाँग, जैसे मार्केटिंग कैंपेन या फ़्लैश सेल में, ऑटोस्केलिंग और क्यूइंग जाँचने के लिए।
- सोक (एंड्योरेंस) टेस्टिंग — घंटों या दिनों तक मध्यम लोड, मेमोरी लीक, कनेक्शन पूल ख़त्म होने और डिस्क बढ़ने जैसी चीज़ें पकड़ने के लिए जो छोटे टेस्ट कभी नहीं दिखाते।
- स्केलेबिलिटी टेस्टिंग — लोड चरणों में बढ़ाकर यह सीखना कि रिसोर्स जोड़ने पर थ्रूपुट और लेटेंसी कैसे बदलती है।
- बेंचमार्किंग — दो वर्ज़न या दो इम्प्लीमेंटेशन की तुलना के लिए एक एंडपॉइंट का तेज़, दोहराने योग्य माप।
- लोड टेस्टिंगऔसत, फिर पीक ट्रैफ़िक: क्या रिस्पॉन्स-टाइम और एरर लक्ष्य पूरे होते हैं?
संदर्भ रेखा:अपेक्षित पीक
- स्ट्रेस टेस्टिंगअपेक्षित पीक से आगे, जब तक कुछ टूट न जाए: फ़ेलियर शालीन (धीमा, 503) या विनाशकारी?
संदर्भ रेखा:अपेक्षित पीक
कुछ टूट जाता है
- स्पाइक टेस्टिंगकम से बहुत ज़्यादा ट्रैफ़िक की अचानक छलाँग: ऑटोस्केलिंग और क्यूइंग की जाँच।
संदर्भ रेखा:अपेक्षित पीक
- सोक (एंड्योरेंस) टेस्टिंगघंटों या दिनों तक मध्यम लोड: मेमोरी लीक, कनेक्शन पूल ख़त्म होना, डिस्क बढ़ना।समय · घंटे या दिन
संदर्भ रेखा:अपेक्षित पीक
- स्केलेबिलिटी टेस्टिंगलोड चरणों में बढ़ाना: रिसोर्स जोड़ने पर थ्रूपुट और लेटेंसी कैसे बदलती है?
एक ही साझा लोड स्केल पर सांकेतिक आकार: ऊँचाइयाँ और समय-अवधि सिर्फ़ उदाहरण हैं। बेंचमार्किंग एक एंडपॉइंट मापती है, उसका अपना कोई लोड आकार नहीं है।
आज़माएँ: HTTP रिक्वेस्ट बेंचमार्क आज़माएँ: API परफ़ॉर्मेंस कंपेरेटर
अहम मेट्रिक्स
- रिस्पॉन्स टाइम — हर रिक्वेस्ट पर मापा जाता है। औसत नहीं, परसेंटाइल रिपोर्ट करें: p50 (मीडियन), p95 और p99 बताते हैं ज़्यादातर यूज़र और सबसे बदक़िस्मत यूज़र क्या अनुभव करते हैं। औसत धीमी पूँछ छिपा देता है।
- थ्रूपुट — प्रति सेकंड रिक्वेस्ट (या ट्रांज़ैक्शन) जो सिस्टम बनाए रखता है।
- एरर रेट — फ़ेल होने वाली रिक्वेस्ट का प्रतिशत (5xx, टाइमआउट, कनेक्शन एरर)। लक्ष्य लोड पर यह शून्य के पास रहना चाहिए।
- कॉन्करेंसी — एक साथ कितने वर्चुअल यूज़र या खुले कनेक्शन सक्रिय हैं।
- रिसोर्स उपयोग — सर्वर साइड पर CPU, मेमोरी, डेटाबेस कनेक्शन, क्यू डेप्थ, लोड टाइमलाइन से जोड़कर।
- SLO अनुपालन और Apdex — SLO अनुपालन तय बजट के अंदर रिक्वेस्ट का हिस्सा है (जैसे 95% 300 ms से कम)। Apdex इससे जुड़ा 0 से 1 का स्कोर है जो एक लक्ष्य समय T के सापेक्ष गिना जाता है: T तक के रिस्पॉन्स पूरे गिने जाते हैं, 4T तक के आधे, और उससे धीमे शून्य।
आज़माएँ: रिस्पॉन्स टाइम एनालाइज़र आज़माएँ: रिस्पॉन्स साइज़ एनालाइज़र
पहला परफ़ॉर्मेंस टेस्ट प्लान करना
- लक्ष्य को नंबर के रूप में तय करें: "500 कॉन्करेंट यूज़र के साथ checkout p95 पर 800 ms से कम में पूरा हो और 0.1% से कम एरर हों"।
- हर पेज के बजाय अहम जर्नी चुनें — लॉगिन, सर्च, कार्ट में जोड़ना, checkout, टॉप तीन API एंडपॉइंट।
- रियलिस्टिक ट्रैफ़िक मॉडल करें: जर्नी का मिक्स, एक्शन के बीच थिंक टाइम, रैम्प-अप और स्टेडी स्टेट। प्रोडक्शन एनालिटिक्स हो तो इस्तेमाल करें।
- बड़े पैमाने पर टेस्ट डेटा तैयार करें: हज़ारों अलग यूज़र, प्रोडक्ट और पेलोड ताकि कैश और यूनिक कंस्ट्रेंट प्रोडक्शन की तरह व्यवहार करें।
- ऐसे एनवायरनमेंट में चलाएँ जो साइज़ में प्रोडक्शन जैसा हो, या नतीजों को सोच-समझकर स्केल करें। लैपटॉप-साइज़ डेटाबेस प्रोडक्शन वाले के बारे में कुछ नहीं बताएगा।
- पहले एक यूज़र से बेसलाइन बनाएँ, फिर रैम्प करें। हर बाद के रन की बेसलाइन से तुलना करें।
- रन के दौरान सर्वर साइड मॉनिटर करें; अकेले क्लाइंट-साइड नंबर नहीं बता सकते कि यह धीमा क्यों हुआ।
आज़माएँ: लोड टेस्ट डेटा जनरेटर आज़माएँ: Concurrent रिक्वेस्ट टेस्ट जनरेटर
टूल्स: JMeter, k6, Gatling और ब्राउज़र टूल्स
Apache JMeter GUI, रिकॉर्डर और CSV डेटा सेट वाला पुराना ओपन-सोर्स विकल्प है; k6 स्क्रिप्ट-आधारित (JavaScript), हल्का और CI-फ़्रेंडली है; Gatling Scala/Java-आधारित है, बेहतरीन रिपोर्ट के साथ; Locust Python-आधारित है। क्लाउड सर्विसेज़ (BlazeMeter, Grafana Cloud k6, Azure Load Testing) वही स्क्रिप्ट कई रीजन से चलाती हैं।
ब्राउज़र प्रोडक्शन-स्केल लोड नहीं बना सकता, लेकिन ब्राउज़र टूल्स लोड टेस्ट के आसपास के स्टेप के लिए आदर्श हैं: एक एंडपॉइंट के रिस्पॉन्स टाइम डिस्ट्रीब्यूशन को मापना, दो एंडपॉइंट की तुलना, पेलोड साइज़ और कम्प्रेशन जाँचना, और रनर के लिए CSV और JSON डेटा फ़ाइलें बनाना।
आज़माएँ: JMeter टेस्ट डेटा जनरेटर आज़माएँ: JMeter CSV जनरेटर आज़माएँ: HTTP रिक्वेस्ट बेंचमार्क
नतीजे पढ़ना
- थ्रूपुट के सपाट होते हुए लेटेंसी बढ़ना मतलब बॉटलनेक आ गया — CPU, डेटाबेस, कनेक्शन पूल या डाउनस्ट्रीम API।
- लेटेंसी से पहले एरर रेट का बढ़ना अक्सर सुस्ती नहीं, कोई सीमा (max connections, रेट लिमिट) होती है।
- p99 का p95 से बहुत ऊपर होना गार्बेज कलेक्शन पॉज़, लॉक कंटेंशन या कुछ रिक्वेस्ट पर पड़ने वाली धीमी डिपेंडेंसी की ओर इशारा करता है।
- सोक टेस्ट में धीमी गिरावट लीक है: मेमोरी, फ़ाइल हैंडल या कनेक्शन।
- दूसरे रन में रिप्रोड्यूस न होने वाला नतीजा शोर है; कोड ट्यून करने से पहले एनवायरनमेंट ठीक करें।
आज़माएँ: API परफ़ॉर्मेंस कंपेरेटर आज़माएँ: कैश हेडर एनालाइज़र
आम गलतियाँ
- एक यूज़र id या एक प्रोडक्ट से टेस्ट करना — सब कुछ कैश से आता है और नंबर कल्पना होते हैं।
- तुरंत फ़ुल लोड पर रैम्प करना, फिर ऐसे स्पाइक के लिए सिस्टम को दोष देना जिसके लिए वह बना ही नहीं था।
- औसत रिपोर्ट करना। हमेशा एरर रेट के साथ p95 और p99 रिपोर्ट करें।
- लोड जनरेटर को उसी मशीन पर चलाना जिस पर टेस्ट होने वाला सिस्टम है।
- पेलोड साइज़ नज़रअंदाज़ करना: 2 MB का JSON रिस्पॉन्स धीमा है चाहे सर्वर कितना भी तेज़ हो।
- लॉन्च से पहले एक बार टेस्ट करना और फिर कभी नहीं। परफ़ॉर्मेंस एक-एक कमिट में गिरती है।
आज़माएँ: रिस्पॉन्स साइज़ एनालाइज़र आज़माएँ: लोड टेस्ट डेटा जनरेटर
अक्सर पूछे जाने वाले सवाल
लोड टेस्टिंग और स्ट्रेस टेस्टिंग में क्या फ़र्क़ है?
लोड टेस्टिंग अपेक्षित ट्रैफ़िक लगाकर पुष्टि करती है कि लक्ष्य पूरे हुए; स्ट्रेस टेस्टिंग अपेक्षित पीक से आगे ट्रैफ़िक बढ़ाती रहती है ताकि ब्रेकिंग पॉइंट मिले और दिखे कि सिस्टम कैसे फ़ेल होता है।
अच्छा API रिस्पॉन्स टाइम क्या है?
इस्तेमाल पर निर्भर है, लेकिन आम बजट हैं: कैश्ड रीड के लिए 100 ms से कम, सामान्य API कॉल के लिए 300 ms से कम और भारी ऑपरेशन के लिए 1 s से कम — औसत नहीं, p95 पर मापा हुआ।
औसत रिस्पॉन्स टाइम की जगह p95 क्यों?
औसत धीमी पूँछ छिपाता है। p95 कहता है कि 95% रिक्वेस्ट कम से कम इतनी तेज़ थीं, जो यूज़र नोटिस करते हैं; p99 सबसे ख़राब रियलिस्टिक केस दिखाता है।
कितने वर्चुअल यूज़र चाहिए?
असली ट्रैफ़िक से निकालें। हर वर्चुअल यूज़र कुछ समय रिस्पॉन्स के इंतज़ार में और कुछ समय एक्शन के बीच "थिंक टाइम" में बिताता है, इसलिए Little's law के अनुसार वर्चुअल यूज़र ≈ लक्ष्य रिक्वेस्ट प्रति सेकंड × (औसत रिस्पॉन्स टाइम + प्रति रिक्वेस्ट औसत थिंक टाइम)। 100 रिक्वेस्ट प्रति सेकंड, 0.3 s रिस्पॉन्स और 5 s थिंक टाइम पर लगभग 530 यूज़र चाहिए; सिर्फ़ रिक्वेस्ट प्रति सेकंड × रिस्पॉन्स टाइम (यहाँ 30) केवल उन्हीं रिक्वेस्ट को गिनता है जो उस पल चल रही हैं। ग्रोथ के लिए 20–50% हेडरूम जोड़ें।
क्या ब्राउज़र से परफ़ॉर्मेंस टेस्ट कर सकते हैं?
आप अलग-अलग एंडपॉइंट माप और बेंचमार्क कर सकते हैं और दो की तुलना कर सकते हैं, जो डेवलपमेंट के दौरान उपयोगी है। प्रोडक्शन-स्केल लोड के लिए अलग मशीनों पर JMeter, k6 या Gatling जैसा डेडिकेटेड टूल चाहिए।
JMeter या k6, कौन बेहतर है?
JMeter में GUI, रिकॉर्डर और सबसे बड़ा इकोसिस्टम है; k6 कोड-फ़र्स्ट, हल्का और CI से स्वाभाविक रूप से जुड़ता है। JavaScript में सहज टीमें अक्सर k6 चुनती हैं; मौजूदा JMeter प्लान वाली टीमें JMeter रखती हैं।
संदर्भ
- Apache JMeter User's ManualJMeter से लोड टेस्ट कैसे बनाएँ, पैरामीटराइज़ करें और चलाएँ, और उसके लिसनर व रिपोर्ट कैसे पढ़ें।
- Web VitalsCore Web Vitals (LCP, INP, CLS): वे क्या मापते हैं और अच्छे यूज़र अनुभव की सीमाएँ क्या हैं।
- ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelउत्पाद गुणवत्ता मॉडल: कार्यात्मक उपयुक्तता, प्रदर्शन दक्षता, संगतता, इंटरैक्शन क्षमता, विश्वसनीयता, सुरक्षा, रखरखाव-योग्यता और लचीलापन।
अभ्यास
रजिस्ट्रेशन डे का लोड टेस्ट प्लान करें और नतीजे पढ़ें
आप एक यूनिवर्सिटी (काल्पनिक) का student portal टेस्ट करते हैं। Release 3.2 course registration का back end बदल रहा है। Spring semester का registration रविवार 17 जनवरी 2027 को 08:00 बजे खुलता है और तीन हफ़्ते खुला रहता है; पिछले semester की तरह लगभग 18,000 छात्र registration करते हैं। Planning मीटिंग में पाँच लोगों ने अपनी चिंताएँ रखीं। Product owner: "Registration तेज़ होना चाहिए और पहले दिन क्रैश नहीं होना चाहिए।" Registrar: "पिछले semester 08:00 के बाद पहले घंटे तक portal इस्तेमाल लायक नहीं था; छात्र बार-बार पेज refresh करते रहे।" Operations lead: "पुराना सिस्टम धीमा होता चला गया और हर कुछ दिनों में उसे restart करना पड़ता था।" Architect: "क्या दूसरा application server सीमा बढ़ाएगा? उसे ख़रीदने से पहले मुझे यह पता होना चाहिए।" Developer: "क्या नई seat-availability query पुरानी से तेज़ है?"
एक developer ने पहले लोड टेस्ट का ड्राफ़्ट प्लान लिखा है: (1) network के शोर से बचने के लिए k6 को staging application server पर ही चलाना; (2) सभी वर्चुअल यूज़र test account student01 से लॉगिन करें; (3) 1,200 वर्चुअल यूज़र एक ही सेकंड में शुरू करना और 10 मिनट चलाना; (4) औसत रिस्पॉन्स टाइम रिपोर्ट करना, और 1 s से कम हो तो टेस्ट पास; (5) staging का सामान्य डेटा इस्तेमाल करना: 300 छात्र और 40 course sections। नीचे के material में पिछले semester के ट्रैफ़िक के आँकड़े हैं, और release candidate 3.2.0-rc1 के एक stepped लोड टेस्ट के नतीजे, जो आपकी टीम ने बाद में सुधरे हुए setup के साथ चलाया।
गाइड के टेस्ट प्रकार, मेट्रिक्स, प्लानिंग चेकलिस्ट और नतीजे पढ़ने के नियमों के साथ काग़ज़ पर काम करें। परफ़ॉर्मेंस टेस्ट डेटा जनरेटर आपके workload को ramp प्रोफ़ाइल में बदल सकता है और उसके थ्रूपुट का अनुमान दे सकता है, लेकिन काग़ज़-कलम काफ़ी हैं। इसके लिए 40–45 मिनट रखें।
Last semester’s access logs (old registration back end)
Busiest 15 minutes 08:00-08:15 on opening day: 100 requests per second
Ordinary day at most 15 requests per second
Peak journey mix search courses 60%, view a section 25%,
register for a section 10%, log in 5%
Think time 7.5 s on average, from a response to the next request
Planning assumption for release 3.2: average response time 0.5 s
Stepped load test of release candidate 3.2.0-rc1, run by the QA team
Production-sized staging; k6 load generators on separate machines
Peak journey mix, 7.5 s think time, 10 minutes per step
Single-user baseline: p50 150 ms, p95 210 ms, no errors
Step Virtual Throughput p50 p95 p99 Errors App server DB connections
users (req/s) (ms) (ms) (ms) CPU peak (pool 50)
1 200 26 160 300 420 0.00% 21% 9
2 400 52 170 340 510 0.00% 39% 18
3 800 102 220 480 950 0.04% 72% 47
4 1,000 105 1,500 4,100 6,800 1.20% 75% 50
5 1,200 106 3,200 7,900 12,000 4.80% 76% 50- पाँचों चिंताओं में से हर एक को उस परफ़ॉर्मेंस टेस्ट के प्रकार से जोड़ें जो उसका जवाब देता है, साथ में यह भी कि वह कितना लोड लगाता है और उसे क्या दिखाना है। फिर टेस्ट को समझदारी भरे क्रम में रखें।
- Product owner के वाक्य को पीक के लिए मापने योग्य लक्ष्यों में बदलें: जर्नी, लोड, परसेंटाइल, एरर रेट, अवधि और एनवायरनमेंट। Registration खुलने के स्पाइक और तीन हफ़्तों के लिए भी लक्ष्य जोड़ें।
- गाइड के FAQ वाले फ़ॉर्मूले से निकालें कि पीक लोड टेस्ट को कितने वर्चुअल यूज़र चाहिए, और हेडरूम जोड़ें। बताएँ कि पिछले semester के 100 रिक्वेस्ट प्रति सेकंड पर आप कितना भरोसा करते हैं।
- ड्राफ़्ट प्लान की समीक्षा करें: उसके पाँचों बिंदुओं में से हर एक के लिए बताएँ कि क्या ग़लत है और उसकी जगह क्या करें। फिर बताएँ कि प्लान में क्या छूट गया है।
- Stepped नतीजों को अपने लक्ष्यों के सामने पढ़ें: क्या पीक का लक्ष्य पूरा हुआ, सीमा कहाँ है, संभावित बॉटलनेक क्या है और आप कितने निश्चित हो सकते हैं, आज आप क्या रिपोर्ट करेंगे, और आगे क्या चलेगा?
मॉडल उत्तर दिखाएँ
टेस्ट के प्रकार। Product owner, "तेज़" और "पहले दिन क्रैश नहीं": अपेक्षित पीक पर लोड टेस्टिंग, यानी पीक जर्नी मिक्स के साथ 100 रिक्वेस्ट प्रति सेकंड, ताकि रिस्पॉन्स-टाइम और एरर लक्ष्यों की पुष्टि हो; फिर स्ट्रेस टेस्टिंग, जो पीक से आगे लोड बढ़ाती रहती है ताकि सीमा पता चले और दिखे कि सिस्टम शालीनता से फ़ेल होता है (धीमे जवाब, 503 जैसा तुरंत "बाद में कोशिश करें" वाला जवाब) या विनाशकारी तरीके से (क्रैश, खोए हुए या दोहरे registration)। Registrar, "पहले घंटे इस्तेमाल लायक नहीं": स्पाइक टेस्टिंग, यानी 08:00 की तरह एक मिनट के अंदर लगभग शून्य ट्रैफ़िक से पीक और उससे आगे की छलाँग, ताकि क्यूइंग और रिकवरी दिखे। 08:00 पर छात्र सोचने के बजाय refresh करते हैं, इसलिए उतने ही छात्र ज़्यादा रिक्वेस्ट भेजते हैं: स्पाइक को छोटे थिंक टाइम या ज़्यादा रिक्वेस्ट रेट से मॉडल करें। Operations lead, "धीमा होता चला गया": सोक (एंड्योरेंस) टेस्टिंग, सामान्य दिन के लोड पर कई घंटे, हो सके तो कई दिन, और लीक के लिए मेमोरी, कनेक्शन और डिस्क पर नज़र। Architect: स्केलेबिलिटी टेस्टिंग, यानी वही लोड स्टेप पहले एक और फिर दो application servers के साथ; सिर्फ़ यही तुलना दिखाती है कि दूसरे server से थ्रूपुट बढ़ता है या नहीं। Developer: बेंचमार्किंग, यानी पुराने और नए build पर, एक ही डेटा और एनवायरनमेंट के साथ, seat-availability एंडपॉइंट का तेज़, दोहराने योग्य माप, p50 और p95 की तुलना के साथ। समझदारी भरा क्रम: पहले एक यूज़र वाली बेसलाइन और बेंचमार्क, फिर लोड टेस्ट, फिर स्ट्रेस और स्पाइक, फिर स्केलेबिलिटी की तुलना और सोक, और हर fix के बाद लोड टेस्ट दोबारा।
मापने योग्य लक्ष्य। ये प्रस्ताव हैं जिन पर product owner से सहमति लेनी है; सहमति के बाद ये परफ़ॉर्मेंस टेस्ट के exit criteria बनते हैं। पीक: पीक मिक्स (courses सर्च करना 60%, section देखना 25%, section में registration 10%, लॉगिन 5%) के साथ 100 रिक्वेस्ट प्रति सेकंड, 10 मिनट के रैम्प-अप के बाद 30 मिनट तक, प्रोडक्शन-साइज़ staging पर: हर जर्नी के लिए p95 800 ms से कम और p99 2 s से कम, 0.1% से कम रिक्वेस्ट फ़ेल हों, और कोई registration न खोए, न दोहराया जाए। हेडरूम: यही लक्ष्य 150 रिक्वेस्ट प्रति सेकंड पर भी पूरे हों (50% क्यों, यह स्टेप 3 बताता है)। खुलने का स्पाइक: एक मिनट के अंदर लगभग शून्य से 150 रिक्वेस्ट प्रति सेकंड, 15 मिनट तक; कुछ भी क्रैश न हो, कोई registration न खोए, न दोहराया जाए; जिन रिक्वेस्ट को सिस्टम संभाल न सके उन्हें अटकने के बजाय तुरंत साफ़ जवाब मिले; और लोड 100 रिक्वेस्ट प्रति सेकंड पर लौटने के 5 मिनट के अंदर p95 फिर 800 ms से नीचे आ जाए। तीन हफ़्ते: 15 रिक्वेस्ट प्रति सेकंड पर कम से कम 48 घंटे, अंत में p95 पहले घंटे के p95 से 10% से ज़्यादा ऊपर न हो, मेमोरी और डेटाबेस कनेक्शन सपाट रहें, और किसी restart की ज़रूरत न पड़े। पुराना सिस्टम कई दिनों में धीमा होता था, इसलिए इससे छोटा सोक टेस्ट तब तक बहुत कम साबित करता है जब तक आप ये ट्रेंड न देखें। आपके नंबर अलग हो सकते हैं, लेकिन हर लक्ष्य में जर्नी, लोड, परसेंटाइल, एरर रेट, अवधि और एनवायरनमेंट होना चाहिए; "तेज़" और "क्रैश नहीं" इनमें से कुछ भी नहीं बताते।
वर्चुअल यूज़र। हर वर्चुअल यूज़र रिस्पॉन्स का इंतज़ार करता है और फिर अगली रिक्वेस्ट से पहले "सोचता" है, इसलिए Little’s law के अनुसार वर्चुअल यूज़र ≈ रिक्वेस्ट प्रति सेकंड × (औसत रिस्पॉन्स टाइम + औसत थिंक टाइम) = 100 × (0.5 + 7.5) = 800। सिर्फ़ रिस्पॉन्स टाइम से गुणा करना (100 × 0.5 = 50) केवल उस पल चल रही रिक्वेस्ट गिनता है और बहुत कम लोड बनाएगा। 20–50% हेडरूम के साथ यह 960 से 1,200 वर्चुअल यूज़र है, यानी लगभग 120 से 150 रिक्वेस्ट प्रति सेकंड। यहाँ ऊपरी सिरा चुनें: 100 रिक्वेस्ट प्रति सेकंड वह है जो ओवरलोड पुराने सिस्टम ने संभाला, असली माँग नहीं। जो रिक्वेस्ट उस तक पहुँचने से पहले ही ठुकरा दी गईं वे उसके logs में नहीं हैं, और जो छात्र हार मानकर चले गए वे बाद में लौटे। इस आँकड़े को निचली सीमा मानें, और पूछें कि क्या web server ने 08:00 पर ठुकराई गई या टाइमआउट हुई रिक्वेस्ट दर्ज कीं। अगर आप परफ़ॉर्मेंस टेस्ट डेटा जनरेटर में 800 यूज़र और 7,500 ms का स्थिर (constant) थिंक टाइम डालें, तो वह लगभग 104 रिक्वेस्ट प्रति सेकंड का अनुमान देगा, यानी 100 से थोड़ा ज़्यादा, क्योंकि वह हर रिस्पॉन्स के लिए 0.5 s की जगह लगभग 200 ms मानता है।
ड्राफ़्ट प्लान। (1) टेस्ट होने वाले server पर चलता लोड जनरेटर उसी से CPU, मेमोरी और network के लिए होड़ करता है, इसलिए सिस्टम असल से धीमा दिखता है और जनरेटर ख़ुद सीमा बन सकता है: k6 को अलग मशीनों पर चलाएँ और उनका CPU भी देखें। (2) सभी यूज़र के लिए एक account का मतलब है कि उसी छात्र का डेटा कैश से आता है और हर registration उसी छात्र के record पर पड़ता है, इसलिए रीड प्रोडक्शन से तेज़ दिखते हैं और registrations ऐसे टकराते हैं जैसा कोई असली दिन नहीं करता (एक छात्र एक section में दो बार registration नहीं कर सकता): हज़ारों अलग test छात्र बनाएँ, हो सके तो उतने जितने registration करेंगे, CSV डेटा सेट के रूप में, और registrations को कई sections में बाँटें। (3) एक ही सेकंड में 1,200 यूज़र स्पाइक है, लोड टेस्ट नहीं, और उसका फ़ेल होना पीक के बारे में कुछ नहीं बताता: लगभग 10 मिनट में रैम्प-अप करें, 30 मिनट स्टेडी स्टेट रखें, फिर रैम्प-डाउन करें, और लोड टेस्ट पास होने के बाद स्पाइक को उसके अपने लक्ष्य के साथ अलग से टेस्ट करें। (4) औसत धीमी पूँछ छिपाता है, "1 s से कम" पर कभी सहमति नहीं हुई, और एरर जाँचे ही नहीं जाते: हर जर्नी के लिए p50, p95 और p99, थ्रूपुट और एरर रेट के साथ, तय लक्ष्यों के सामने रिपोर्ट करें। (5) 300 छात्र और 40 sections मेमोरी में समा जाते हैं और हर query को तेज़ बना देते हैं, उस नई seat-availability query को भी जिसके बारे में developer ने पूछा: प्रोडक्शन-साइज़ डेटा इस्तेमाल करें, उतने ही छात्र, courses और sections जितने प्रोडक्शन में हैं, generate किए हुए या प्रोडक्शन से कॉपी करके छात्रों की पहचान हटाए हुए। प्लान में छूटा हुआ: लोड से पहले एक यूज़र की बेसलाइन, फिर स्टेप में लोड; जर्नी मिक्स और 7.5 s थिंक टाइम; रन के दौरान सर्वर साइड मॉनिटरिंग (application server का CPU और मेमोरी, डेटाबेस CPU, कनेक्शन पूल, slow queries); यह पक्का करने के लिए दूसरा रन कि नतीजा रिप्रोड्यूस होता है; और product owner के साथ तय लक्ष्य।
नतीजे पढ़ना। पहले workload जाँचें: 800 वर्चुअल यूज़र ने 102 रिक्वेस्ट प्रति सेकंड बनाईं, जैसा फ़ॉर्मूले ने अनुमान लगाया था। पीक पर (स्टेप 3) सभी रिक्वेस्ट को साथ गिनें तो रिस्पॉन्स-टाइम और एरर लक्ष्य पूरे हैं: p95 480 ms, p99 950 ms, एरर 0.04%। लेकिन तालिका हर जर्नी अलग से नहीं दिखाती, और 10% हिस्से वाले registration का p95 बहुत धीमा हो सकता है जबकि कुल p95 नीचे रहे; साथ ही यह स्टेप 10 मिनट चला, लक्ष्य के 30 मिनट नहीं। इसलिए पीक का लक्ष्य पूरा कहने से पहले हर जर्नी का p95 माँगें और 30 मिनट का पूरा लोड टेस्ट चलाएँ। हेडरूम का लक्ष्य फ़ेल है। स्टेप 3 से स्टेप 4 तक 200 और यूज़र ने सिर्फ़ 3 रिक्वेस्ट प्रति सेकंड जोड़ीं (102 से 105), जबकि फ़ॉर्मूला लगभग 125 की उम्मीद करता है, और इसी बीच p50 220 से 1,500 ms पर, p95 4,100 ms पर और एरर 1.2% पर पहुँच गए। थ्रूपुट के सपाट होते हुए लेटेंसी बढ़ना मतलब बॉटलनेक: यह build लगभग 105 रिक्वेस्ट प्रति सेकंड पर रुक जाता है, जो पिछले semester के दर्ज पीक से सिर्फ़ 5% ऊपर है और हेडरूम लक्ष्य के 150 से बहुत नीचे।
संभावित बॉटलनेक डेटाबेस की तरफ़ है, application server के CPU में नहीं। CPU लगभग 75% पर रहता है और थ्रूपुट के साथ चलता है, जबकि डेटाबेस कनेक्शन स्टेप 3 में 50 में से 47 के पीक पर हैं और स्टेप 4 से सभी 50 इस्तेमाल में हैं। जब हर कनेक्शन व्यस्त होता है, नई रिक्वेस्ट एक खाली कनेक्शन का इंतज़ार करती हैं, इसीलिए p50 तक उछलता है, और जो बहुत देर इंतज़ार करती हैं वे फ़ेल होती हैं; स्टेप 3 का p99, जो उसके p95 का लगभग दोगुना है, इस बात से मेल खाता है कि पहली रिक्वेस्ट खाली कनेक्शन का इंतज़ार करने लगी हैं। क्लाइंट-साइड नंबर यह नहीं बता सकते कि पूल छोटा है या queries हर कनेक्शन को बहुत देर पकड़े रहती हैं, जैसे प्रोडक्शन-साइज़ डेटा पर नई seat-availability query; इसलिए developers को डेटाबेस का CPU, slow-query log, lock waits और कनेक्शन के लिए रिक्वेस्ट के इंतज़ार का समय चाहिए। अगर डेटाबेस ख़ुद संतृप्त है तो पूल बड़ा करना fix नहीं है: तब ज़्यादा कनेक्शन उसे और धीमा करते हैं। यह पैटर्न स्टेप 5 में दोहराया जाता है और सर्वर मेट्रिक्स इससे मेल खाते हैं, इसलिए इसके शोर होने की संभावना कम है; फिर भी कोई कोड ट्यून करे, उससे पहले स्टेप 4 दोबारा चलाकर पक्का करें कि यह रिप्रोड्यूस होता है। Architect का सवाल अभी खुला है: दूसरा application server CPU जोड़ता है, जो सीमा नहीं है, और ज़्यादा डेटाबेस कनेक्शन, जो तभी मदद करते हैं जब डेटाबेस के पास क्षमता बची हो; डेटाबेस की सीमा समझ आने के बाद स्केलेबिलिटी टेस्ट इसका जवाब देगा।
आज आप क्या रिपोर्ट करेंगे, तय लक्ष्यों के सामने एक defect के रूप में, product owner और developers को: "Release candidate 3.2.0-rc1, प्रोडक्शन-साइज़ staging, पीक मिक्स, 7.5 s थिंक टाइम, हर स्टेप 10 मिनट। 100 रिक्वेस्ट प्रति सेकंड पर कुल p95 480 ms और एरर 0.04% (हर जर्नी के आँकड़े माँगे गए हैं)। थ्रूपुट लगभग 105 रिक्वेस्ट प्रति सेकंड पर रुक जाता है: 1,000 वर्चुअल यूज़र पर p95 4.1 s और 1.2% रिक्वेस्ट फ़ेल; 1,200 पर 7.9 s और 4.8%। Application server CPU 75%, डेटाबेस कनेक्शन 50 में से 50। 150 रिक्वेस्ट प्रति सेकंड का हेडरूम लक्ष्य पूरा नहीं हुआ, इसलिए registration के दिन पिछले semester जैसा हाल दोहराने का जोखिम है।" रन का डेटा और सर्वर ग्राफ़ संलग्न करें। Fix के बाद वही stepped टेस्ट उसी स्क्रिप्ट, डेटा और एनवायरनमेंट के साथ चलाएँ और इस रन से तुलना करें (confirmation testing); फिर 100 और 150 रिक्वेस्ट प्रति सेकंड पर 30 मिनट का लोड टेस्ट, 150 रिक्वेस्ट प्रति सेकंड से ऊपर स्ट्रेस टेस्ट, स्पाइक, स्केलेबिलिटी की तुलना और सोक टेस्ट। उन्हें अभी चलाने से वे बस उसी सीमा से फिर टकराएँगे।
अगर आपके जवाब अलग हैं, तो जाँचें कि हर लक्ष्य में लोड, परसेंटाइल और एरर रेट है, कि आपके वर्चुअल यूज़र के हिसाब में थिंक टाइम शामिल है, और कि आपने रिस्पॉन्स टाइम के साथ थ्रूपुट और रिसोर्स वाले कॉलम भी पढ़े। कोई दूसरा बजट, जैसे p95 1 s से कम, सहमति होने पर ठीक है; जो निष्कर्ष सपाट थ्रूपुट या भरे हुए कनेक्शन पूल को नज़रअंदाज़ करे, वह ठीक नहीं।
इस topic में आपकी प्रगति
प्रगति ट्रैक करने के लिए साइन इन करें
Topics पूर्ण चिह्नित करें, जहाँ छोड़ा था वहीं से जारी रखें और specialisation परीक्षाएँ खोलें।
QA रोडमैप का हिस्सा
इस topic से पहले
अगले topics
इस गाइड में बताए गए टूल्स
किसी endpoint का रिस्पॉन्स टाइम कई सैंपल पर मापें: न्यूनतम, अधिकतम, औसत, माध्यिका और p95।
किसी सार्वजनिक endpoint पर छोटा, सुरक्षित बेंचमार्क चलाएँ (सीमित रिक्वेस्ट व concurrency) और throughput तथा latency percentile पाएँ।
दो endpoint के रिस्पॉन्स टाइम और साइज़ की आमने-सामने तुलना करें (जैसे v1 बनाम v2, staging बनाम production)।
रिस्पॉन्स साइज़ का विश्लेषण: कच्चे बनाम compressed बाइट, हेडर का साइज़, JSON ढाँचे का भार और सबसे बड़े फ़ील्ड।
k6, JMeter, Gatling और Locust लोड टेस्ट के लिए बड़े पैरामीटर डेटासेट (users, token, id, payload) बनाएँ।
फ़ील्ड स्कीमा से JMeter के लिए तैयार टेस्ट डेटा बनाएँ (CSV Data Set Config फ़ाइलें और User Defined Variables)।
JMeter CSV Data Set Config के लिए सही quoting, delimiter और encoding वाली CSV फ़ाइलें बनाएँ।
किसी लक्षित endpoint के लिए सुरक्षित डिफ़ॉल्ट वाली concurrency टेस्ट स्क्रिप्ट बनाएँ (k6, JMeter JMX, Locust, Artillery, Node.js)।
Cache-Control, Expires, ETag, Last-Modified, Vary और Age हेडर जाँचें और समझें कि ब्राउज़र तथा CDN रिस्पॉन्स को कैसे कैश करेंगे।