क्या मुझे Apache2 में KeepAlive को सक्रिय करना चाहिए?


25

किसी भी डिफ़ॉल्ट इंस्टॉलेशन में, अपाचे 2 कीपएलाइव ऑफ के साथ आता है, लेकिन किसी अन्य सर्वर को देखते हुए, एलाइव मॉड्यूल चालू कर दिया गया।

तो, मुझे कैसे पता चलेगा कि अगर कीपएलाइव मेरे लिए सही है? मुझे इसे कॉन्फ़िगर करने के बारे में कुछ अच्छे उदाहरण कहां मिल सकते हैं?

जवाबों:


31

2 अच्छे उत्तर पहले से ही हैं, लेकिन शायद सबसे महत्वपूर्ण वास्तविक जीवन का मुद्दा अभी तक उल्लेख नहीं किया गया है।

सबसे पहले, ओपी 2 पूर्ववर्ती उत्तर और इस छोटे से ब्लॉग पोस्ट को समझना चाह सकता है कि यह समझने के लिए कि रखवाले क्या हैं। (लेखक टीसीपीआई / आईपी के बारे में विस्तृत रूप से नहीं बताता है कि कनेक्शन खुला होने के बाद "तेज" हो रहा है। यह सच है, आईपी ​​विंडो स्केलिंग से लंबे समय तक चलने वाले कनेक्शन को फायदा होता है , लेकिन प्रभाव तब तक महत्वपूर्ण नहीं है जब तक कि फाइलें न हों। बड़े, या बैंडविथ-देरी उत्पाद असामान्य रूप से बड़े हैं।)

अपाचे का उपयोग करते समय HTTP कीपेलिव के खिलाफ बड़ा तर्क यह है कि यह अपाचे प्रक्रियाओं को अवरुद्ध करता है। अर्थात्, रखने वाले क्लाइंट का उपयोग उसकी 'अपाचे' प्रक्रिया को किसी अन्य क्लाइंट की सेवा करने से रोकेगा, जब तक कि ग्राहक कनेक्शन बंद नहीं करता या समय समाप्त नहीं हो जाता। उसी समय में, यह अपाचे उदाहरण कई अन्य कनेक्शनों की सेवा दे सकता था।

अब, एक बहुत ही सामान्य अपाचे कॉन्फ़िगरेशन प्रीफ़ॉर्क एमपीएम और एक PHP / पर्ल / पायथन दुभाषिया, और उल्लिखित भाषा में आवेदन कोड है। इस मामले में प्रत्येक अपाचे प्रक्रिया इस अर्थ में "भारी" है कि यह कई मेगाबाइट रैम (अपाचे इंटरप्रेटर और एप्लिकेशन कोड के साथ जुड़ा हुआ) पर कब्जा कर लेती है। यह, एक साथ प्रत्येक रखने योग्य Apache उदाहरण के अवरुद्ध के साथ, अक्षम है।

एक सामान्य वर्कअराउंड 2 अपाचे सर्वर (दोनों एक ही भौतिक सर्वर पर, या 2 सर्वर पर, आवश्यकतानुसार) का उपयोग करना है:

  • गतिशील सामग्री के लिए mod_php (या जो भी प्रोग्रामिंग भाषा का उपयोग किया जाता है) के साथ एक "भारी", बंद रखने के साथ ।
  • स्थैतिक सामग्री (छवि, सीएसएस, जेएस आदि) पर रखने के लिए मॉड्यूल के एक न्यूनतम सेट के साथ एक "हल्का", पर रखवाले के साथ ।

जब जरूरत हो तब आप गतिशील और स्थिर सामग्री के इस पृथक्करण पर विस्तार कर सकते हैं :

  • स्टेटिक कंटेंट के लिए ईवेंट-चालित सर्वर का उपयोग करना, जैसे कि nginx
  • स्थिर सामग्री के लिए CDN का उपयोग करना (आपके लिए सभी स्थिर सामग्री सेवा कर सकता है)
  • स्थैतिक और / या गतिशील सामग्री के कैशिंग को लागू करना

अपाचे को अवरुद्ध करने से बचने के संबंध में एक और तरीका है , पेर्बल जैसे होशियार कनेक्शन से निपटने के साथ एक लोड बैलेंसर का उपयोग करना

.. और भी बहुत कुछ। :-)


2
क्या ये जवाब 8 साल बाद भी प्रासंगिक हैं?
TheStoryCoder

हां, अभी भी प्रासंगिक है अगर आप प्रीफॉर्क एमपीएम का उपयोग कर रहे हैं। ध्यान दें कि अपाचे httpd 2.4 (उदाहरण के लिए RHEL7) डिफ़ॉल्ट रूप से KeepAlive का उपयोग करता है (लेकिन इसके कॉन्फ़िगरेशन में स्पष्ट रूप से इसे सूचीबद्ध नहीं करता है - कम से कम RHEL7 में)।
कैमरून केर

5

रखवाले कुछ मामलों में अच्छे हो सकते हैं, वे दूसरों में बहुत बुरे हो सकते हैं। वे एक नए कनेक्शन की स्थापना के समय और प्रयास को कम करते हैं, लेकिन वे सर्वर संसाधनों को रखने की अवधि के लिए टाई करते हैं। उदाहरण:

  • कई छोटी वस्तुओं के साथ पृष्ठ, डायलअप पर ग्राहक - रखने योग्य होना चाहिए।
  • कुछ बड़ी वस्तुओं वाले पृष्ठ - रखने योग्य कोई लाभ नहीं होगा।
  • बहुत अधिक संख्या में अनूठे आगंतुक के साथ सर्वर - रखने योग्य बंद होना चाहिए (अन्यथा, सॉकेट और थ्रेड मेमोरी में बैठे रहेंगे जो कि रखवाले समय समाप्त होने की प्रतीक्षा कर रहे हैं और नए ग्राहकों की सेवा नहीं कर रहे हैं)।

जैसा कि आप देख सकते हैं, KeepAliveTimeout आपके सर्वर प्रदर्शन के अनुकूलन में भी बड़ी भूमिका निभाएगा।

अपने उपयोग पैटर्न को देखें और अपने लिए निर्णय लें।


0

आपको KeepAlive On का इस्तेमाल जरूर करना चाहिए।

देख:

http://httpd.apache.org/docs/2.0/mod/core.html#keepalive

इस तरह से एकाधिक क्वेरी भेजने के लिए ब्राउज़र द्वारा एकल टीसीपी कनेक्शन का फिर से उपयोग किया जाएगा। आमतौर पर एक वेबसाइट में कई घटक होते हैं (HTML पेज, जावास्क्रिप्ट कोड, चित्र)। जब तक ये संसाधन एक ही डोमेन में हैं, इसलिए एक ही सर्वर द्वारा सेवा दी जा सकती है, तो KeepAlive कनेक्शन प्रदर्शन में भारी वृद्धि देता है क्योंकि ब्राउज़र को एक नया टीसीपी कनेक्शन स्थापित नहीं करना होगा।

एक ब्राउज़र आमतौर पर एक डोमेन के लगभग 3 समानांतर कनेक्शन खोलता है। तो मान लीजिए कि आपकी साइट में 18 ऑब्जेक्ट हैं। ब्राउज़र 3 कनेक्शन खोल सकता है, और यह KeepAlive मोड का उपयोग करके प्रत्येक कनेक्शन में 6 ऑब्जेक्ट डाउनलोड करेगा। KeepAlive के बिना, इसे 18 TCP कनेक्शन खोलने होंगे, जो बहुत धीमा है।

अधिकांश, या सभी आधुनिक ब्राउज़र HTTP / 1.1 अनुरूप हैं, इसलिए यह बस काम करना चाहिए।

स्क्वीड जैसी कुछ HTTP प्रॉक्सी, HTTP / 1.1 अनुरूप नहीं हैं, लेकिन वे वैसे भी KeepAlive कनेक्शन के उपयोग का अनुरोध करते हैं।


यह केवल क्लाइंट साइड विचार से है, जबकि मुझे लगता है कि सर्वर साइड संसाधन उपयोग भी महत्वपूर्ण है।
मॉर्गन चेंग

सर्वर-साइड संसाधन उपयोग उपयोगकर्ता-कथित विलंबता से अधिक महत्वपूर्ण है?
यवेस जुनेकेरा

1
मैं KeepAlive को चालू करने में भी विश्वास करता हूं, हालांकि Apache का 15 सेकंड का डिफ़ॉल्ट समय बहुत अधिक उदार है क्योंकि यह बहुत लंबे समय तक प्रक्रियाओं को अवरुद्ध रखता है। मैं आमतौर पर लगभग 2 सेकंड का समय निर्धारित करता हूं, जिसके परिणामस्वरूप KeepAlive का उपयोग लगभग एक पगेलोड के दौरान किया जाता है।
Martijn Heemels
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.