जवाबों:
Prefork और कार्यकर्ता दो प्रकार के MPM अपाचे प्रदान करते हैं। दोनों के अपने गुण और अवगुण हैं।
डिफ़ॉल्ट रूप से mpm प्रीफ़ॉर्क है जो थ्रेड सुरक्षित है।
Prefork MPM एक धागे के साथ कई बाल प्रक्रियाओं का उपयोग करता है और प्रत्येक प्रक्रिया एक समय में एक कनेक्शन संभालती है।
कार्यकर्ता MPM प्रत्येक थ्रेड के साथ कई बाल प्रक्रियाओं का उपयोग करता है। प्रत्येक थ्रेड एक समय में एक कनेक्शन संभालता है।
अधिक जानकारी के लिए आप https://httpd.apache.org/docs/2.4/mpm.html और https://httpd.apache.org/docs/2.4/mod/prefork.html पर जा सकते हैं
Apache के मल्टी-प्रोसेसिंग मॉड्यूल्स (MPMs) मशीन पर नेटवर्क पोर्ट्स को बाइंड करने, रिक्वेस्ट स्वीकार करने और रिक्वेस्ट को हैंडल करने के लिए बच्चों को भेजने के लिए जिम्मेदार हैं ( http://httpd.apache.org/docs/2.2/mpm.html )।
वे किसी भी अन्य अपाचे मॉड्यूल की तरह हैं, सिवाय इसके कि केवल एक और केवल एक एमपीएम को किसी भी समय सर्वर में लोड किया जाना चाहिए । एमपीएम को कॉन्फ़िगरेशन के दौरान चुना जाता है और कॉन्फ़िगर स्क्रिप्ट के साथ तर्क का उपयोग करके सर्वर में संकलित किया जाता है--with-mpm=NAME
जहां NAME
वांछित एमपीएम का नाम है।
अपाचे प्रत्येक ऑपरेटिंग सिस्टम के लिए एक डिफ़ॉल्ट एमपीएम का उपयोग करेगा जब तक कि एक अलग संकलन-समय पर चुना न जाए (उदाहरण के लिए विंडोज mpm_winnt
डिफ़ॉल्ट रूप से उपयोग किया जाता है)। यहां ऑपरेटिंग सिस्टम और उनके डिफ़ॉल्ट MPMs की सूची दी गई है:
beos
mpm_netware
mpmt_os2
prefork
( अपाचे संस्करण के लिए अद्यतनprefork
, 2.4 :, worker
या event
, या प्लेटफॉर्म क्षमताओं के आधार पर)mpm_winnt
सर्वर में कौन से मॉड्यूल संकलित किए गए हैं इसकी जांच करने के लिए कमांड-लाइन विकल्प -l
( यहां प्रलेखन है) का उपयोग करें। उदाहरण के लिए विंडोज इंस्टॉलेशन पर आपको कुछ ऐसा मिल सकता है:
> 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
- निर्देशों का एक संग्रह जो एक से अधिक मल्टी-प्रोसेसिंग मॉड्यूल (MPM) द्वारा कार्यान्वित किया जाता हैbeos
- यह मल्टी-प्रोसेसिंग मॉड्यूल बीओएस के लिए अनुकूलित है।event
- मानक कार्यकर्ता एमपीएम का एक प्रयोगात्मक संस्करणmpm_netware
मल्टी-प्रोसेसिंग मॉड्यूल नोवेल नेटवेअर के लिए अनुकूलित एक विशेष रूप से थ्रेडेड वेब सर्वर को लागू करता हैmpmt_os2
हाइब्रिड मल्टी-प्रोसेस, ओएस / 2 के लिए बहु-थ्रेडेड एमपीएमprefork
गैर-थ्रेडेड, पूर्व-forking वेब सर्वर को लागू करता हैmpm_winnt
- यह मल्टी-प्रोसेसिंग मॉड्यूल विंडोज एनटी के लिए अनुकूलित है।worker
- मल्टी-प्रोसेसिंग मॉड्यूल एक हाइब्रिड मल्टी-थ्रेडेड मल्टी-प्रोसेस वेब सर्वर को लागू करनाअब, के बीच prefork
और अंतर करने के लिए worker
।
गैर-थ्रेडेड, पूर्व-forking वेब सर्वर को लागू करता है जो Apache 1.3 के समान तरीके से अनुरोधों को संभालता है। यह उन साइटों के लिए उपयुक्त है जिन्हें गैर-थ्रेड-सुरक्षित पुस्तकालयों के साथ संगतता के लिए थ्रेडिंग से बचने की आवश्यकता है। यह प्रत्येक अनुरोध को अलग करने के लिए सबसे अच्छा एमपीएम भी है, ताकि एक अनुरोध के साथ कोई समस्या किसी अन्य को प्रभावित न करे।
worker
एम पी एम के औजार एक संकर मल्टी-प्रोसेस बहु लड़ी सर्वर और बेहतर प्रदर्शन देता है, जब तक कि एक अन्य मॉड्यूल है कि गैर धागा सुरक्षित पुस्तकालयों (यह भी देखें शामिल उपयोग कर रहा है, इसलिए यह प्राथमिकता दी जानी चाहिए इस चर्चा या इस serverfault पर)।
अधिक विस्तार के लिए इस पर एक नज़र डालें । यह संदर्भित करता है कि अपाचे कई अनुरोधों को कैसे संभालता है। प्रीफोर्किंग, जो डिफ़ॉल्ट है, कई अपाचे प्रक्रियाएं शुरू करता है (2 डिफ़ॉल्ट रूप से यहां, हालांकि मेरा मानना है कि कोई इसे httpd.conf के माध्यम से कॉन्फ़िगर कर सकता है)। कार्यकर्ता एमपीएम प्रति अनुरोध एक नया सूत्र शुरू करेगा, जो मुझे लगता है कि अधिक स्मृति कुशल है। ऐतिहासिक रूप से, अपाचे ने प्रीफ़ॉर्क का उपयोग किया है, इसलिए यह एक बेहतर परीक्षणित मॉडल है। थ्रेडिंग केवल 2.0 में जोड़ा गया था।
CentOS के लिए 6.x और 7.x (अमेज़न लिनक्स सहित) का उपयोग करें:
sudo httpd -V
यह आपको दिखाएगा कि कौन से एमपीएम कॉन्फ़िगर किए गए हैं। या तो पूर्वगामी, कार्यकर्ता, या घटना। प्रीफ़ॉर्क पहले, थ्रेडसेफ़ मॉडल है। कार्यकर्ता बहु-थ्रेडेड है, और ईवेंट php-mpm का समर्थन करता है जिसे थ्रेड्स और अनुरोधों को संभालने के लिए एक बेहतर सिस्टम माना जाता है।
हालाँकि, कॉन्फ़िगरेशन के आधार पर आपके परिणाम भिन्न हो सकते हैं। मैंने 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
आप बता सकते हैं कि क्या अपाचे निम्नलिखित कमांड जारी करके प्रीफॉर्म या वर्कर का उपयोग कर रहा है
apache2ctl -l
परिणामी आउटपुट में, prefork.c या worker.c के उल्लेख देखें
apachectl -V
और इसके आगे के आउटपुट को देखें Server MPM
। यह भी जाँच कर सकते ps aux
हैं httpd
या दोनों के लिए देखो या httpd.worker
।
apache2ctl -l
काम नहीं किया; का उपयोग करना पड़ा apachectl -l
।
httpd -V
वह कुछ इस तरह देगा:Server MPM: worker
RHEL7 पर Apache 2.4 में प्रीफ़ॉर्क या वर्कर mpm के बीच स्विच करना आसान है
निष्पादित करके 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 फ़ाइल और एडिटिंग के बाद 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
अपाचे में 2 प्रकार के एमपीएम (मल्टी-प्रोसेसिंग मॉड्यूल) परिभाषित हैं:
1: प्रीफ़ॉर्क 2: कार्यकर्ता
डिफ़ॉल्ट रूप से, Apacke को पूर्वनिर्मित मोड यानी गैर-थ्रेडेड प्री-फोर्किंग वेब सर्वर में कॉन्फ़िगर किया गया है। इसका मतलब है कि प्रत्येक अपाचे बच्चे की प्रक्रिया में एक एकल धागा होता है और एक समय में एक अनुरोध को संभालता है। उसके कारण, यह अधिक संसाधनों की खपत करता है।
अपाचे में कार्यकर्ता एमपीएम भी है जो अपाचे को एक बहु-प्रक्रिया, बहु-थ्रेडेड वेब सर्वर में बदल देता है। कार्यकर्ता MPM प्रत्येक थ्रेड के साथ कई बाल प्रक्रियाओं का उपयोग करता है।