मैं वर्तमान में एक सर्वर सेटअप की लोड क्षमता का परीक्षण कर रहा हूं जिसे मैं एक साथ रख रहा हूं। Apache2 सर्वर पर PHP 5.X स्थापित है, और यह एक अलग मशीन पर एक मास्टर डेटाबेस से कनेक्ट होता है, और फिर 1 से 2 गुलाम सर्वर से पढ़ने के लिए।PHP जनरेटिंग पेज, लेकिन उन्हें उपयोगकर्ता को तुरंत वापस नहीं लौट रहा
मेरा टेस्ट पेज उत्पन्न होता है। 2 सेकंड उत्पन्न करने के लिए अगर मैं इसे स्वयं कहता हूं। मैंने एक अलग सर्वर पर एक php स्क्रिप्ट बनाई है जो परीक्षण पृष्ठ पर 65 एक साथ कॉल बनाता है। परीक्षण पृष्ठ पूरे पृष्ठ में माइक्रोटाइम बेंचमार्क लेता है ताकि मुझे यह बताने के लिए कि प्रत्येक अनुभाग कितना समय ले रहा है। जैसा कि अपेक्षित था - कम से कम मेरे लिए, यदि किसी के पास इस पर राय या सुझाव हैं, तो टिप्पणी करने में संकोच न करें- पृष्ठ के एसक्यूएल भाग को पहले जोड़े के अनुरोधों के लिए थोड़ी सी मात्रा लगती है और फिर गिरावट आती है क्योंकि शेष प्रश्न ढेर और इंतजार करना है। मैंने सोचा कि यह एक डिस्क आईओ मुद्दा हो सकता है, लेकिन एक ठोस व्यवहार ड्राइव पर परीक्षण करते समय वही व्यवहार किया गया।
मेरी समस्या यह है कि लगभग 30 या 65 पृष्ठ बनाए गए हैं, और मेरी टेस्ट स्क्रिप्ट द्वारा लोड की गई मुझे उम्मीद है। मेरे बेंचमार्क ने कहा कि पृष्ठ उदाहरण के लिए 3 सेकंड में बनाया गया था, और मेरी टेस्ट स्क्रिप्ट ने कहा कि इसे पृष्ठ को 3.1 सेकंड में पूर्ण मिला है। अंतर ज्यादा नहीं था। समस्या यह है कि अन्य अनुरोधों के लिए, मेरा बेंचमार्क कहता है कि पृष्ठ 3 सेकंड में लोड किए गए थे, लेकिन परीक्षण स्क्रिप्ट को पृष्ठ को 6 सेकंड तक पूर्ण नहीं मिला था। यह अपाचे सर्वर द्वारा उत्पन्न किए जा रहे पृष्ठ के बीच एक पूर्ण 3 सेकंड है और इसे मेरी टेस्ट स्क्रिप्ट पर वापस भेजा गया है जिसने अनुरोध किया है। यह सुनिश्चित करने के लिए कि यह परीक्षण स्क्रिप्ट के साथ कोई समस्या नहीं थी, मैंने पृष्ठ को स्थानीय ब्राउज़र में लोड करते समय लोड करने का प्रयास किया, और क्रोम में टाइमलाइन विंडो के माध्यम से उसी देरी की पुष्टि की।
मैंने अपाचे के लिए सभी प्रकार की कॉन्फ़िगरेशन की कोशिश की है, लेकिन ऐसा लगता है कि इस देरी के कारण क्या हो रहा है। मेरा सबसे हालिया प्रयास नीचे है। मशीन राम के 2 गीगाहर्ट्ज के साथ एक क्वाड कोर एएमडी 2.8 गीगा है। कॉन्फ़िगरेशन के साथ कोई मदद, या क्या करना है इसके बारे में अन्य सुझावों की सराहना की जाएगी। - लंबे सवाल के लिए खेद है।
मुझे यह उल्लेख करना चाहिए कि स्क्रिप्ट के दौरान मैंने संसाधनों की निगरानी की थी, और सीपीयू ने अधिकतम 9% भार मारा और हमेशा कम से कम 1 गीगा रैम मुक्त था।
मैं यह भी उल्लेख करूंगा कि वही प्रकार की चीज तब होती है जब मैं पूछताछ कर रहा हूं एक स्थिर HTML पृष्ठ है। पहला जोड़ा .X सेकंड लेता है, और फिर यह धीरे-धीरे 3 सेकंड तक रैंप करता है।
LockFile ${APACHE_LOCK_DIR}/accept.lock PidFile ${APACHE_PID_FILE} Timeout 120 MaxClients 150 KeepAlive On KeepAliveTimeout 4 MaxKeepAliveRequests 150 Header always append x-frame-options sameorigin StartServers 50 MinSpareServers 25 MaxSpareServers 50 MaxClients 150 MaxRequestsPerChild 0 User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} AccessFileName .httpdoverride Order allow,deny DefaultType text/plain HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn Include mods-enabled/*.load Include mods-enabled/*.conf Include httpd.conf Include ports.conf LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent Include conf.d/ Include sites-enabled/ AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess Off SecUploadKeepFiles Off SecDebugLog /var/log/apache2/modsec_debug.log SecDebugLogLevel 0 SecAuditEngine RelevantOnly SecAuditLogRelevantStatus ^5 SecAuditLogParts ABIFHZ SecAuditLogType Serial SecAuditLog /var/log/apache2/modsec_audit.log SecRequestBodyLimit 131072000 SecRequestBodyInMemoryLimit 131072 SecResponseBodyLimit 524288000 ServerTokens Full SecServerSignature "Microsoft-IIS/5.0"
अद्यतन: यह प्रतिक्रियाओं के बहुत तथ्य यह है कि एसक्यूएल दोषी है पर ध्यान केंद्रित कर रहे हैं कर रहे हैं। तो मैं यहां बता रहा हूं कि वही व्यवहार एक स्थिर HTML पृष्ठ पर होता है। बेंचमार्किंग के परिणाम नीचे सूचीबद्ध हैं।
Concurrency Level: 10 Time taken for tests: 5.453 seconds Complete requests: 1000 Failed requests: 899 (Connect: 0, Receive: 0, Length: 899, Exceptions: 0) Write errors: 0 Total transferred: 290877 bytes HTML transferred: 55877 bytes Requests per second: 183.38 [#/sec] (mean) Time per request: 54.531 [ms] (mean) Time per request: 5.453 [ms] (mean, across all concurrent requests) Transfer rate: 52.09 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 21 250.7 0 3005 Processing: 16 33 17.8 27 138 Waiting: 16 33 17.8 27 138 Total: 16 54 253.0 27 3078 Percentage of the requests served within a certain time (ms) 50% 27 66% 36 75% 42 80% 46 90% 58 95% 71 98% 90 99% 130 100% 3078 (longest request)
मैं यह भी बताया जाएगा कि मैं PHP और microtime() कि अंतराल से पहले पेज बनाई जा रही है क्या हो रहा है के उपयोग के माध्यम से निर्धारित। मैंने पृष्ठ को उत्पन्न होने और मेरे टेस्ट स्क्रिप्ट को प्राप्त करने के बीच के अंतर के बीच इसे निर्धारित किया। अंतर का अर्थ यह है कि जब तक मेरा टेस्ट पेज प्राप्त नहीं होता है, तब तक पेज को तब तक उत्पन्न किया जाता है जब तक कि मेरा अनुरोध पृष्ठ प्राप्त न हो, चाहे कोई भी अनुरोध कितना समय लगे।
उन सभी को धन्यवाद जिन्होंने जवाब दिया है। सभी अच्छे अंक हैं, मैं बस यह नहीं कह सकता कि उनमें से किसी ने भी इस मुद्दे को हल किया है।
उच्च स्टार्टसेवर और मिनीस्पियर सर्वर का प्रयास करें। मेरे अनुभव में, यातायात के अचानक विस्फोट के साथ मारा जाने पर अपाचे के अतिरिक्त थ्रेड शुरू करने में कुछ समय लग सकता है। चीजों की ग्रैंडर स्कीम में, कनेक्शन को तेजी से और अपाचे थ्रेड को तेज़ी से मुक्त करने के लिए एक तेज रिवर्स प्रॉक्सी (nginx) के माध्यम से प्रॉक्सी। यहां तक कि बेहतर, स्किड/वार्निश वाले कैश पेज ताकि आप सैकड़ों बार सटीक उसी सामग्री को उत्पन्न करने वाले संसाधनों को बर्बाद न करें। –
आह, बस डेटाबेस के बारे में थोड़ा ध्यान दिया। 1) यदि संभव हो तो लिखने से बचें 2) पहचानें कि कौन से प्रश्न धीमे हो रहे हैं 3) कैश पूरी तरह से डेटाबेस पहुंच से बचने के लिए। मैं कुछ बेंचमार्किंग करता हूं - प्रत्येक क्वेरी के लिए रिकॉर्ड क्वेरी समय, और अनुरोध के दौरान धीमे से सबसे तेज़ से आदेश दिया गया सभी प्रश्नों की एक सूची उत्पन्न करता है। –
अच्छा सवाल, बस एक अलग साइट पर है। –