[Apache] अपाचे प्रीफरक बनाम वर्कर एमपीएम


Answers

अपाचे के मल्टी-प्रोसेसिंग मॉड्यूल (एमपीएम) मशीन पर नेटवर्क बंदरगाहों के लिए बाध्यकारी, अनुरोध स्वीकार करने और अनुरोधों को प्रबंधित करने के लिए बच्चों को भेजना ( http://httpd.apache.org/docs/2.2/mpm.html ) के लिए जिम्मेदार हैं।

वे किसी अन्य अपाचे मॉड्यूल की तरह हैं, सिवाय इसके कि केवल एक और केवल एक ही एमपीएम को किसी भी समय सर्वर में लोड किया जाना चाहिए । एमपीएम कॉन्फ़िगरेशन के दौरान चुना जाता है और कॉन्फ़िगर स्क्रिप्ट के साथ तर्क --with-mpm=NAME with --with-mpm=NAME का उपयोग करके सर्वर में संकलित किया जाता है जहां NAME वांछित MPM का नाम है

एपाचे प्रत्येक ऑपरेटिंग सिस्टम के लिए एक डिफ़ॉल्ट एमपीएम का प्रयोग करेगी जब तक कम्पाइल-टाइम में कोई भिन्न चुना न हो (उदाहरण के लिए विंडोज़ mpm_winnt पर डिफ़ॉल्ट रूप से उपयोग किया जाता है)। यहां ऑपरेटिंग सिस्टम और उनके डिफ़ॉल्ट एमपीएम की सूची है:

यह जांचने के लिए कि क्या मॉड्यूल सर्वर में संकलित हैं, कमांड लाइन -l ( यहाँ दस्तावेज है) का उपयोग करें। उदाहरण के लिए Windows इंस्टॉलेशन पर आपको कुछ मिल सकता है:

> httpd -l
Compiled in modules:
  core.c
  mod_win32.c
  mpm_winnt.c
  http_core.c
  mod_so.c

संस्करण 2.2 के अनुसार यह उपलब्ध मुख्य विशेषताएं और एमपीएम मॉड्यूल की सूची है :

  • core - कोर अपाचे HTTP सर्वर विशेषताएं जो हमेशा उपलब्ध हैं
  • mpm_common - एक से अधिक बहु-प्रसंस्करण मॉड्यूल (एमपीएम) द्वारा लागू किए गए निर्देशों का संग्रह
  • beos - यह मल्टी-प्रोसेसिंग मॉड्यूल बीओएस के लिए अनुकूलित है
  • event - मानक कार्यकर्ता एमपीएम का प्रायोगिक प्रकार
  • mpm_netware बहु-संसाधन मॉड्यूल नोवेल नेटवेयर के लिए अनुकूलित एक विशेष रूप से थ्रेडेड वेब सर्वर को कार्यान्वित करता है
  • mpmt_os2 हाइब्रिड बहु-प्रक्रिया, ओएस / 2 के लिए बहु-थ्रेडेड एमपीएम
  • prefork एक गैर-थ्रेडेड, प्री- prefork वेब सर्वर लागू करता है
  • mpm_winnt - यह बहु-संसाधन मॉड्यूल Windows NT के लिए अनुकूलित है
  • worker - एक संकर बहु-थ्रेडेड बहु-प्रक्रिया वेब सर्वर को लागू करने वाली बहु-संसाधन मॉड्यूल

अब, prefork और worker बीच अंतर करने के लिए

prefork एमपीएम

एक गैर-थ्रेडेड, प्री-फंकिंग वेब सर्वर लागू करता है जो अपाचे 1.3 के समान तरीके से अनुरोध करता है। गैर-थ्रेड-सुरक्षित लाइब्रेरी के साथ संगतता के लिए थ्रेडिंग से बचने की आवश्यकता वाली साइटों के लिए यह उपयुक्त है। प्रत्येक अनुरोध को अलग करने के लिए यह सबसे अच्छा एमपीएम भी है, ताकि एकल अनुरोध के साथ कोई समस्या किसी अन्य को प्रभावित नहीं करेगी।

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

Question

अपाचे कॉन्फ़िग फ़ाइल को देखकर, मुझे प्रीफ़ोर्क और वर्कर एमपीएम परिभाषित किया गया है। क्या अंतर है और कौन से अपाचे का उपयोग कर रहा है?




RHEL7 पर अपाचे 2.4 में prefork या कर्मचारी mpm के बीच स्विच करना आसान है

निष्पादन द्वारा एमपीएम प्रकार की जांच करें

sudo httpd -V

Server version: Apache/2.4.6 (Red Hat Enterprise Linux)
Server built:   Jul 26 2017 04:45:44
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

अब फ़ाइल को संपादित करने के बाद MPM को बदलने और आवश्यक एमपीएम को रद्द करने के लिए

 /etc/httpd/conf.modules.d/00-mpm.conf 

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so



CentOS 6.x और 7.x के लिए (अमेज़ॅन लिनक्स सहित) का उपयोग करें:

sudo httpd -V

यह आपको दिखाएगा कि कौन से एमपीएम कॉन्फ़िगर किए गए हैं। या तो prefork, कार्यकर्ता, या घटना Prefork पहले, थ्रेसेफ मॉडल है। कार्यकर्ता बहु-थ्रेडेड है, और ईवेंट php-mpm का समर्थन करता है जो थ्रेड्स और अनुरोधों को संभालने के लिए एक बेहतर प्रणाली माना जाता है।

हालांकि, कॉन्फ़िगरेशन के आधार पर आपके परिणाम भिन्न हो सकते हैं। मैंने php-mpm में अस्थिरता को देखा है और किसी भी गति सुधार में नहीं। एक आक्रामक मकड़ी पीएचपी-एमपीएम में अधिकतम बाल प्रक्रियाओं को आसानी से निकाला जा सकता है।

प्रीफोर्क, कार्यकर्ता, या इवेंट के लिए सेटिंग sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (CentOS 6.x / 7.x / Apache 2.4 के लिए) में सेट की गई है।

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#LoadModule mpm_event_module modules/mod_mpm_event.so