Apache में MaxClients। मेरी सफलता का आकार कैसे पता करें?


9

से http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

वेबसर्वर के प्रदर्शन को प्रभावित करने वाला सबसे बड़ा हार्डवेयर मुद्दा RAM है। एक वेबसर्वर को कभी भी स्वैप नहीं करना चाहिए, क्योंकि स्वैपिंग प्रत्येक अनुरोध की विलंबता को एक बिंदु से परे बढ़ाता है जिसे उपयोगकर्ता "पर्याप्त तेज़" मानते हैं। यह उपयोगकर्ताओं को स्टॉप और पुनः लोड करने का कारण बनता है, जिससे लोड बढ़ जाता है। आप MaxClients सेटिंग को नियंत्रित कर सकते हैं और करना चाहिए, ताकि आपका सर्वर इतने बच्चों को न देख पाए, जो उसे स्वैप करना शुरू कर दें। ऐसा करने के लिए यह प्रक्रिया सरल है: अपनी औसत अपाचे प्रक्रिया का आकार निर्धारित करें, अपनी प्रक्रिया सूची को शीर्ष जैसे उपकरण के माध्यम से देखकर, और इसे अपनी कुल उपलब्ध स्मृति में विभाजित करें, अन्य प्रक्रियाओं के लिए कुछ जगह छोड़ दें।

मुख्य मुद्दा यह है कि मैं समझ नहीं पा रहा हूं कि आकार को कैसे जाना जाए, क्योंकि, मेरे पास 3888 से अधिक के httpd का आकार नहीं है

लेकिन, अगर हमें MaxClients के लिए संख्या निर्धारित करने की आवश्यकता है, और मेरे पास 4GB RAM है, तो मुझे मिल जाएगा: 972, इसलिए मुझे MaxClients में 900 की तरह उपयोग करना चाहिए?


4
"मेरे पास 3888 से अधिक नहीं पर httpd का आकार है" - मुझे लगता है कि मैं हर किसी के लिए बोलता हूं जब मैं कहता हूं, "एचयूएच?"
Womble

जवाबों:


9

सबसे पहले, अपनी अपाचे प्रक्रियाओं में से एक का पीआईडी ​​निर्धारित करें।

तो आप इस तरह से कुछ कर सकते हैं:

cat /proc/PIDHERE/status | grep VmRSS

इससे उस विशेष प्रक्रिया का निवासी (वर्तमान) निवासी-सेट-आकार मिलेगा:

VmRSS: 304456 kB

यह मान जैसा लगता है, यह रैम में निवासी प्रक्रिया का आकार है।

फिर माप की अपनी इकाई को सामान्य करें ( 4GB * 1024 * 1024 = 4,194,304 KB)। फूट डालो:

4194304 KB / 304456 KB = 13.77 processes

इस बात पर विचार करें कि आपके पास संभवतः आपके सिस्टम पर चलने वाली अन्य प्रक्रियाएं हैं जो मेमोरी का भी उपभोग करेंगी, और आदर्श रूप से आप स्वैपिंग को कम से कम करना चाहते हैं, इसलिए आप संभवत: 13 Apache MaxClients कॉन्फ़िगर किए गए (मेरे नंबरों का उपयोग करके) चाहते हैं, आप कुछ राशि कम चाहते हैं (अपने विवेक पर) )।

यह एक कच्चा अनुमान है; लोड के आधार पर आपकी अपाचे प्रक्रियाओं का आकार समय के साथ बढ़ सकता है।


1
जबकि RSS साझा पृष्ठ शामिल नहीं करता है, इसमें कॉपी-ऑन-राइट के रूप में फ़्लैग किए गए पृष्ठ शामिल हैं - यानी (rss का योग) / (भौतिक मेमोरी) की तुलना में अधिक प्रक्रियाओं के लिए मशीन पर जगह है। मेरे उत्तर को अन्यत्र भी देखें - अच्छे प्रदर्शन के लिए मुक्त स्थान आवश्यक है।
सिम्बियन

4

परीक्षण परिदृश्यों से अधिकतम क्लाइंट का पूर्वावलोकन करना एक प्रारंभिक बिंदु है - लेकिन समस्या को ठीक से हल करने के लिए आपको यह मापना शुरू करना होगा कि आपका आवेदन वास्तविक ट्रैफ़िक के साथ कैसा व्यवहार कर रहा है।

मानो आपकी अपाचे प्री-फोर्क चल रही हो…।

Httpd प्रक्रियाओं की संख्या और 'फ्री' के आउटपुट को गिनने के लिए क्रोन जॉब सेट करें। ध्यान दें कि यदि आपका वेबसर्वर स्थानीय फ़ाइलों (और बहुत से मामलों में, तब भी जब यह नहीं है) से किसी भी सामग्री की सेवा कर रहा है, तो कैश / बफ़र्स के लिए उपलब्ध स्मृति की मात्रा प्रदर्शन पर बड़ा प्रभाव डालेगी। यानी यदि आप गमागमन के बिंदु पर पहुंचते हैं, तो आपका वेब प्रदर्शन शायद भयानक है!

एक बार जब आप कुछ डेटा प्राप्त कर लेते हैं, तो इसे एक चार्ट पर प्लॉट करें और उस पर कम से कम वर्ग प्रतिगमन करें - उन क्लाइंट की संख्या को खोजने के लिए एक्सट्रपलेट करें जिन पर आप httpd मेमोरी उपयोग के लिए अपनी लक्ष्य सीमा तक पहुँचते हैं। मेमोरी लक्ष्य के लिए एक प्रारंभिक बिंदु भौतिक मेमोरी के 80% / सामग्री के आकार का 80% से कम होगा।

(ध्यान दें कि अगर आपको मिन्सपर्सवियर्स बहुत अधिक मूल्य पर मिल गया है, तो परिणाम सटीक नहीं हो सकते हैं)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

एक आदर्श दुनिया में, आप एक ही लॉग फ़ाइल में URL प्रतिक्रिया समय भी मापेंगे - लेकिन यह बहुत अधिक जटिल है।


मेरे लिए, बफ़र्स / कैश बहुत कम बदलता है चाहे 11 क्लाइंट चल रहे हों या जब सर्वर 86 या 151 क्लाइंट तक पहुंच गया हो (और सर्वर क्रैश हो गया हो)। आप अपने MEM वेरिएबल में क्या देखने की उम्मीद करते हैं? मुझे दो नंबर मिले, इसलिए सोच रहा था कि क्या उबंटू 12.04 आपकी उम्मीद के अलावा कुछ दे रहा है।
पीटरबी

'फ्री' चलाने की कोशिश करें और आप देखेंगे कि मुझे क्या उम्मीद है (2 नंबर)। यदि यह सच है कि विभिन्न संख्याओं की प्रक्रियाओं के साथ इन संख्याओं में बहुत कम भिन्नता है, तो या तो आप घटना आधारित सर्वर चला रहे हैं या आपकी मैक्ससपर्सिवर्स सेटिंग मूर्खतापूर्ण है। यदि आप अपने httpd.conf के आउटपुट और संबंधित हिस्सों का एक नमूना पोस्ट करते हैं तो शायद हमारे पास एक बेहतर तस्वीर होगी?
सिम्बियन

.... और "क्रैश"? क्या दुर्घटना?
सिम्बियन

क्षमा करें, httpd.conf सेटिंग्स और नमूना आउटपुट के लिए pastebin.com/aHZCagVn देखें । 'क्रैश' से मेरा मतलब है कि बहुत सारे क्लाइंट, सर्वर मेमोरी से बाहर चला जाता है और लॉक हो जाता है। कृपया अधिक के लिए pastebin.com/fnXzBfQL देखें ।
पीटरबी

1
@PeterB यह अधिक संभावना है कि MySQLd इस समस्या का कारण है। जब कर्नेल का OOM किलर सबसे खराब अपराधियों को मारता है, तो सबसे पहले / proc / PID / oom_score_adj के मूल्य के आधार पर अपराध करता है। जैसा कि आपके आउटपुट में दर्शाया गया है, mysqld पहले गया था। आपको अपने VM की बाधाओं में फिट होने के लिए अधिक उचित रूप से my.cnf में सेटिंग्स समायोजित करने की आवश्यकता हो सकती है। एक / अस्थायी / वर्कअराउंड के रूप में, बस यह देखने के लिए कि क्या आप OOM किलर किकिंग से बच सकते हैं, अतिरिक्त वर्चुअल मेमोरी के लिए स्वैफ़ाइल जोड़ने का प्रयास करें; एक बार जब आप अपने असली मुद्दे की पहचान कर लेते हैं तो उससे छुटकारा पा लें।
लूप्सवर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.