हमारी Performance & Scalability श्रृंखला का हिस्सा
पूरी गाइड पढ़ें80% प्रदर्शन संबंधी समस्याएं अंतिम उपयोगकर्ताओं द्वारा खोजी जाती हैं, परीक्षण द्वारा नहीं। लोड परीक्षण उपयोगकर्ताओं को समस्याओं का सामना करने से पहले आपके एप्लिकेशन के विरुद्ध वास्तविक दुनिया के ट्रैफ़िक पैटर्न का अनुकरण करके इस अनुपात को बदल देता है। ब्लैक फ्राइडे ट्रैफ़िक को संभालने वाली साइट और क्रैश होने वाली साइट के बीच अंतर लगभग हमेशा यह होता है कि किसी ने पहले लोड परीक्षण चलाया था या नहीं।
यह मार्गदर्शिका वेब अनुप्रयोगों, ईकॉमर्स प्लेटफ़ॉर्म और ईआरपी सिस्टम के लिए लोड परीक्षण पद्धति, उपकरण चयन, परीक्षण डिज़ाइन और परिणाम व्याख्या को कवर करती है।
मुख्य बातें
- लोड परीक्षण को यथार्थवादी उपयोगकर्ता व्यवहार का अनुकरण करना चाहिए, न कि केवल एक समापन बिंदु पर हथौड़ा मारना चाहिए
- अनुकूलन से पहले प्रदर्शन आधार रेखाएं स्थापित करें --- आपने जो नहीं मापा है उसे आप सुधार नहीं सकते
- उत्पादन जैसे वातावरण में लोड परीक्षण चलाएँ; स्टेजिंग परिणाम उत्पादन व्यवहार को प्रतिबिंबित नहीं कर सकते हैं
- तैनाती से पहले प्रदर्शन प्रतिगमन को पकड़ने के लिए सीआई/सीडी में लोड परीक्षणों को स्वचालित करें
लोड टेस्ट के प्रकार
| परीक्षण प्रकार | उद्देश्य | अवधि | लोड पैटर्न |
|---|---|---|---|
| धुआं परीक्षण | न्यूनतम लोड के तहत बुनियादी कार्यक्षमता सत्यापित करें | 1-2 मिनट | 1-5 उपयोगकर्ता |
| लोड परीक्षण | अपेक्षित ट्रैफ़िक के तहत प्रदर्शन मान्य करें | 10-30 मिनट | सामान्य यातायात |
| तनाव परीक्षण | ब्रेकिंग पॉइंट ढूंढें | 15-30 मिनट | धीरे-धीरे बढ़ रहा है |
| स्पाइक परीक्षण | अचानक ट्रैफ़िक बढ़ने का परीक्षण करें | 5-10 मिनट | अचानक छलांग |
| सोख परीक्षण | मेमोरी लीक और गिरावट का पता लगाएं | 2-8 घंटे | निरंतर सामान्य भार |
k6 के साथ लोड परीक्षण
बेसिक लोड टेस्ट
// k6/load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 }, // Ramp up to 50 users
{ duration: '5m', target: 50 }, // Stay at 50 users
{ duration: '2m', target: 100 }, // Ramp up to 100 users
{ duration: '5m', target: 100 }, // Stay at 100 users
{ duration: '2m', target: 0 }, // Ramp down
],
thresholds: {
http_req_duration: ['p(95)<500', 'p(99)<1000'],
http_req_failed: ['rate<0.01'],
http_reqs: ['rate>100'],
},
};
export default function () {
// Simulate realistic user behavior
const homeResponse = http.get('https://example.com/');
check(homeResponse, {
'homepage status is 200': (r) => r.status === 200,
'homepage loads in under 1s': (r) => r.timings.duration < 1000,
});
sleep(Math.random() * 3 + 1); // 1-4 seconds think time
const productsResponse = http.get('https://example.com/api/v1/products');
check(productsResponse, {
'products API is 200': (r) => r.status === 200,
'products API under 500ms': (r) => r.timings.duration < 500,
});
sleep(Math.random() * 2 + 1);
}
ईकॉमर्स उपयोगकर्ता यात्रा परीक्षण
// k6/ecommerce-journey.js
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export const options = {
scenarios: {
browsing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 200 },
{ duration: '10m', target: 200 },
{ duration: '5m', target: 0 },
],
exec: 'browsingScenario',
},
purchasing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 20 },
{ duration: '10m', target: 20 },
{ duration: '5m', target: 0 },
],
exec: 'purchaseScenario',
},
},
thresholds: {
'http_req_duration{scenario:browsing}': ['p(95)<800'],
'http_req_duration{scenario:purchasing}': ['p(95)<2000'],
http_req_failed: ['rate<0.01'],
},
};
export function browsingScenario() {
group('Browse Products', () => {
http.get('https://store.example.com/');
sleep(2);
http.get('https://store.example.com/products');
sleep(3);
http.get('https://store.example.com/products/sample-product');
sleep(2);
});
}
export function purchaseScenario() {
group('Purchase Flow', () => {
// Browse
http.get('https://store.example.com/products/sample-product');
sleep(1);
// Add to cart
http.post('https://store.example.com/api/cart', JSON.stringify({
productId: 'prod_123',
quantity: 1,
}), { headers: { 'Content-Type': 'application/json' } });
sleep(2);
// Checkout
http.get('https://store.example.com/cart');
sleep(3);
// Place order (simulated)
const orderResponse = http.post('https://store.example.com/api/checkout/validate', JSON.stringify({
email: `test-${__VU}@example.com`,
}), { headers: { 'Content-Type': 'application/json' } });
check(orderResponse, {
'checkout validates': (r) => r.status === 200 || r.status === 201,
});
sleep(1);
});
}
तनाव परीक्षण (ब्रेकिंग पॉइंट ढूंढें)
// k6/stress-test.js
import http from 'k6/http';
import { check } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 200 },
{ duration: '5m', target: 200 },
{ duration: '2m', target: 500 },
{ duration: '5m', target: 500 },
{ duration: '2m', target: 1000 },
{ duration: '5m', target: 1000 },
{ duration: '5m', target: 0 },
],
};
export default function () {
const res = http.get('https://example.com/api/v1/products');
check(res, {
'status is 200': (r) => r.status === 200,
});
}
परिणामों की व्याख्या करना
प्रमुख मेट्रिक्स
| मीट्रिक | स्वस्थ | चेतावनी | गंभीर |
|---|---|---|---|
| P95 प्रतिक्रिया समय | <500ms | 500ms-2s | >2s |
| P99 प्रतिक्रिया समय | <1s | 1-5s | >5s |
| त्रुटि दर | <0.1% | 0.1-1% | >1% |
| थ्रूपुट | लक्ष्य पूरा करें | लक्ष्य का 80% | <80% लक्ष्य |
सामान्य टोंटी पैटर्न
सीपीयू-बाध्य बाधा: लोड के साथ प्रतिक्रिया समय रैखिक रूप से बढ़ता है। P95 और P99 धीरे-धीरे अलग होते हैं।
- ठीक करें: हॉट कोड पथों को अनुकूलित करें, सीपीयू क्षमता जोड़ें, या क्षैतिज रूप से स्केल करें
डेटाबेस बाधा: एक विशिष्ट लोड सीमा पर प्रतिक्रिया समय तेजी से बढ़ता है। कनेक्शन पूल थकावट.
- ठीक करें: क्वेरी अनुकूलन, कनेक्शन पूलिंग, प्रतिकृतियां पढ़ें (देखें डेटाबेस स्केलिंग गाइड)
स्मृति बाधा: समय के साथ धीरे-धीरे गिरावट। जीसी रुकने से विलंबता में वृद्धि होती है।
- ठीक करें: मेमोरी बढ़ाएं, मेमोरी लीक ठीक करें, ऑब्जेक्ट आवंटन अनुकूलित करें
नेटवर्क बाधा: प्रतिक्रिया समय सभी समापन बिंदुओं पर समान रूप से बढ़ता है। बैंडविड्थ संतृप्ति.
- ठीक करें: स्थिर संपत्तियों के लिए सीडीएन, संपीड़न, पेलोड आकार कम करें
प्रदर्शन आधार रेखाएँ
आधार रेखा स्थापित करना
अनुकूलन से पहले, अपने वर्तमान प्रदर्शन का दस्तावेजीकरण करें:
# Run baseline test
k6 run --out json=baseline-results.json k6/load-test.js
# Compare after optimization
k6 run --out json=optimized-results.json k6/load-test.js
प्रदर्शन बजट
प्रत्येक समापन बिंदु के लिए स्वीकार्य प्रदर्शन परिभाषित करें:
| समापन बिंदु | P95 लक्ष्य | थ्रूपुट लक्ष्य |
|---|---|---|
| मुखपृष्ठ | 500ms | 200 अनुरोध/सेकंड |
| उत्पाद सूची | 800 एमएस | 150 अनुरोध/सेकंड |
| उत्पाद विवरण | 600ms | 200 अनुरोध/सेकंड |
| कार्ट में जोड़ें | 300ms | 100 अनुरोध/सेकंड |
| चेकआउट | 2000ms | 50 अनुरोध/सेकंड |
| खोजें | 500ms | 100 अनुरोध/सेकंड |
| व्यवस्थापक डैशबोर्ड | 1500ms | 20 अनुरोध/एस |
सीआई/सीडी एकीकरण
स्वचालित प्रदर्शन प्रतिगमन परीक्षण
# .github/workflows/performance.yml
name: Performance Test
on:
push:
branches: [main]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6 load test
uses: grafana/[email protected]
with:
filename: k6/load-test.js
flags: --out json=results.json
env:
K6_TARGET_URL: ${{ secrets.STAGING_URL }}
- name: Check thresholds
run: |
if grep -q '"thresholds":{".*":"fail"' results.json; then
echo "Performance thresholds exceeded!"
exit 1
fi
लोड परीक्षण चेकलिस्ट
परीक्षण से पहले
- पर्यावरण उत्पादन से मेल खाता है (उदाहरण प्रकार, डेटाबेस आकार)
- परीक्षण डेटा प्रतिनिधि है (यथार्थवादी उत्पाद गणना, उपयोगकर्ता गणना)
- मॉनिटरिंग सक्रिय है (परीक्षण के दौरान सर्वर मेट्रिक्स को ट्रैक करें)
- हितधारकों को सूचित किया जाता है (लोड परीक्षण अलर्ट ट्रिगर कर सकते हैं)
- सीडीएन और कैशिंग को उत्पादन की तरह कॉन्फ़िगर किया गया है
परीक्षण के दौरान
- सर्वर सीपीयू, मेमोरी, डिस्क I/O की निगरानी करें
- डेटाबेस कनेक्शन और क्वेरी विलंबता की निगरानी करें
- त्रुटि दर में वृद्धि पर नजर रखें
- संसाधन समाप्ति की जाँच करें (फ़ाइल डिस्क्रिप्टर, कनेक्शन)
- उस लोड स्तर पर ध्यान दें जहां प्रदर्शन में गिरावट आती है
परीक्षण के बाद
- दस्तावेज़ आधारभूत परिणाम
- बाधाओं और उनकी लोड सीमा की पहचान करें
- प्रदर्शन में सुधार के लिए टिकट बनाएं
- प्रदर्शन बजट से तुलना करें
- अनुकूलन के बाद अनुवर्ती परीक्षण शेड्यूल करें
अक्सर पूछे जाने वाले प्रश्न
क्या हमें परीक्षण उत्पादन या स्टेजिंग लोड करना चाहिए?
यदि संभव हो तो दोनों. नियमित परीक्षण और सीआई/सीडी एकीकरण के लिए मंचन। आवधिक सत्यापन के लिए उत्पादन (कम ट्रैफ़िक घंटों के दौरान) क्योंकि स्टेजिंग अक्सर डेटाबेस आकार, कैशे वार्मथ, सीडीएन कॉन्फ़िगरेशन और नेटवर्क टोपोलॉजी में भिन्न होती है। यदि आप केवल एक वातावरण का परीक्षण कर सकते हैं, तो स्टेजिंग का परीक्षण करें लेकिन इसे यथासंभव उत्पादन जैसा बनाएं।
हमें कितनी बार लोड परीक्षण चलाना चाहिए?
प्रत्येक तैनाती पर धुआं परीक्षण (सीआई/सीडी में स्वचालित)। साप्ताहिक या प्रमुख रिलीज़ से पहले पूर्ण लोड परीक्षण। तनाव परीक्षण त्रैमासिक या ज्ञात उच्च-ट्रैफ़िक घटनाओं (बिक्री, लॉन्च) से पहले। मेमोरी लीक और दीर्घकालिक गिरावट का पता लगाने के लिए त्रैमासिक परीक्षण करें।
हम ईआरपी प्रणाली का परीक्षण कैसे लोड करते हैं?
ईआरपी लोड परीक्षण के लिए विभिन्न कार्यों को करने वाले समवर्ती उपयोगकर्ताओं के अनुकरण की आवश्यकता होती है: चालान बनाना, खरीद आदेश बनाना, रिपोर्ट चलाना, डेटा आयात करना। सबसे भारी संचालन (रिपोर्ट निर्माण, डेटा आयात) और सबसे समवर्ती संचालन (पीक घंटों के दौरान ऑर्डर प्रविष्टि) पर ध्यान दें। ECOSIRE हमारी सहायता सेवाओं के हिस्से के रूप में Odoo प्रदर्शन परीक्षण प्रदान करता है।
अनुरोधों के बीच यथार्थवादी सोचने का समय क्या है?
ईकॉमर्स ब्राउज़िंग के लिए: 2-5 सेकंड। फॉर्म भरने के लिए: 10-30 सेकंड. चेकआउट के लिए: 15-60 सेकंड। व्यवस्थापक/ईआरपी उपयोग के लिए: 5-15 सेकंड। हमेशा अपने लोड परीक्षणों में यादृच्छिक सोचने का समय जोड़ें --- निरंतर अंतराल अवास्तविक सिंक्रनाइज़ लोड पैटर्न बनाते हैं।
आगे क्या आता है
लोड परीक्षण से उन बाधाओं का पता चलता है जो आपके अनुकूलन प्रयासों का मार्गदर्शन करती हैं। डेटाबेस बाधाओं के लिए डेटाबेस स्केलिंग, स्थिर परिसंपत्ति वितरण के लिए सीडीएन अनुकूलन, और लोचदार क्षमता के लिए ऑटो-स्केलिंग का पालन करें।
प्रदर्शन परीक्षण और अनुकूलन के लिए ECOSIRE से संपर्क करें, या संपूर्ण बुनियादी ढांचा रणनीति के लिए हमारी DevOps गाइड देखें।
ECOSIRE द्वारा प्रकाशित - व्यवसायों को दबाव में प्रदर्शन करने वाले एप्लिकेशन बनाने में मदद करना।
लेखक
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
ECOSIRE के साथ अपना व्यवसाय बढ़ाएं
ईआरपी, ईकॉमर्स, एआई, एनालिटिक्स और ऑटोमेशन में एंटरप्राइज समाधान।
संबंधित लेख
How Much Does Cloud Hosting Cost in 2026? Real Price Breakdown (AWS, Hetzner, DigitalOcean, Odoo.sh)
Real 2026 cloud hosting costs from a team that pays the bills: $5-$25/mo hobby, $50-$400/mo SMB, hidden egress and backup fees, reserved-instance math.
Odoo Hosting Requirements in 2026: Server Sizing by User Count (With Real Configs)
Odoo hosting requirements by user count: vCPU, RAM, storage, and worker settings for 5 to 250+ users, plus PostgreSQL tuning values from real deployments.
Shopify Speed Optimization: A Technical Checklist That Actually Moves Core Web Vitals (2026)
A field-tested Shopify speed checklist for 2026 — what actually improves LCP, INP, and CLS on real stores, what wastes time, and how to audit apps and themes.
Performance & Scalability से और अधिक
Shopify Speed Optimization: A Technical Checklist That Actually Moves Core Web Vitals (2026)
A field-tested Shopify speed checklist for 2026 — what actually improves LCP, INP, and CLS on real stores, what wastes time, and how to audit apps and themes.
Technical SEO Audit Checklist 2026: 47 Checks We Run on Every Client Site
The 47-point technical SEO audit checklist we run on every client site in 2026 — crawlability, indexation, canonicals, hreflang, Core Web Vitals, and logs.
Odoo 19 HR: Skills Matrix, Career Plans, Performance Cycles
Odoo 19 HR upgrade: native skills matrix, career path planning, performance review cycles, 9-box grid, succession planning, HRIS integration.
Odoo 19 Performance Benchmarks: PostgreSQL 17 Tuning Numbers
Real-world Odoo 19 performance benchmarks: web client speed, ORM throughput, PG17 tuning settings, connection pooling, worker counts, scaling thresholds.
OpenClaw Cost Optimization and Token Efficiency at Scale
OpenClaw token cost optimization: prompt caching, model routing, response caching, batch APIs, and per-tenant cost guardrails for production agents.
Power BI Incremental Refresh for Tables Over 10 Million Rows
Power BI Incremental Refresh playbook for 10M+ row tables: partition design, RangeStart/RangeEnd, refresh policies, query folding, and DirectQuery hybrids.