अपाचे प्रीफ़ॉर्क बनाम वर्कर एमपीएम


113

Apache config फाइल को देखते हुए, मैं Prefork और वर्कर MPM को परिभाषित करता हूं। क्या अंतर है और कौन सा अपाचे उपयोग कर रहा है?

जवाबों:


120

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 पर जा सकते हैं


11
यह भी देखें कि "मैं किस अपाचे एमपीएम का उपयोग करूं?" serverfault.com/a/383634
Nazariy

@arvind // प्रत्येक थ्रेड एक कनेक्शन को एक बार में संभालता है // यहाँ कनेक्शन का अर्थ है एकल उपयोगकर्ता या एकल अनुरोध? pls समझाएं
user1844933

21

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

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

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

सर्वर में कौन से मॉड्यूल संकलित किए गए हैं इसकी जांच करने के लिए कमांड-लाइन विकल्प -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

preforkएम पी एम

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

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


1
Apache 2.4.7 के ubuntu-भरोसेमंद -64 की एक डिफ़ॉल्ट स्थापना इवेंट MPM का उपयोग कर रही है
Federico

9

अधिक विस्तार के लिए इस पर एक नज़र डालें । यह संदर्भित करता है कि अपाचे कई अनुरोधों को कैसे संभालता है। प्रीफोर्किंग, जो डिफ़ॉल्ट है, कई अपाचे प्रक्रियाएं शुरू करता है (2 डिफ़ॉल्ट रूप से यहां, हालांकि मेरा मानना ​​है कि कोई इसे httpd.conf के माध्यम से कॉन्फ़िगर कर सकता है)। कार्यकर्ता एमपीएम प्रति अनुरोध एक नया सूत्र शुरू करेगा, जो मुझे लगता है कि अधिक स्मृति कुशल है। ऐतिहासिक रूप से, अपाचे ने प्रीफ़ॉर्क का उपयोग किया है, इसलिए यह एक बेहतर परीक्षणित मॉडल है। थ्रेडिंग केवल 2.0 में जोड़ा गया था।


3
इवेंट MPM के बारे में क्या?
विंस क्रोनलिन

6

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

3

आप बता सकते हैं कि क्या अपाचे निम्नलिखित कमांड जारी करके प्रीफॉर्म या वर्कर का उपयोग कर रहा है

apache2ctl -l

परिणामी आउटपुट में, prefork.c या worker.c के उल्लेख देखें


8
अपाचे को दोनों एमपीएम मॉड्यूल के साथ संकलित किया जा सकता है ताकि यह हमेशा विश्वसनीय न हो। यदि यह दो एमपीएम मॉड्यूल को सूचीबद्ध करता है तो कोशिश करें apachectl -Vऔर इसके आगे के आउटपुट को देखें Server MPM। यह भी जाँच कर सकते ps auxहैं httpdया दोनों के लिए देखो या httpd.worker
रिफ्लेक्सिव

2
मेरे मामले में apache2ctl -lकाम नहीं किया; का उपयोग करना पड़ा apachectl -l
वकलैंडो

2
उनमें से कोई भी मेरे लिए सूचीबद्ध नहीं है, फिर भी अपाचे ठीक काम करता है, अपाचे / 2.4.7 (उबंटू)
कराटेग

2
सेंटोस 7.x में जो अपाचे 2.4.6 चल रहा है, httpd -Vवह कुछ इस तरह देगा:Server MPM: worker
रनमोक

2

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

जब मैंने mpm_worker या mpm_event का उपयोग करने की कोशिश की, तो यह मेरे पेज पर काम नहीं करता है
Leoh

0

अपाचे में 2 प्रकार के एमपीएम (मल्टी-प्रोसेसिंग मॉड्यूल) परिभाषित हैं:

1: प्रीफ़ॉर्क 2: कार्यकर्ता

डिफ़ॉल्ट रूप से, Apacke को पूर्वनिर्मित मोड यानी गैर-थ्रेडेड प्री-फोर्किंग वेब सर्वर में कॉन्फ़िगर किया गया है। इसका मतलब है कि प्रत्येक अपाचे बच्चे की प्रक्रिया में एक एकल धागा होता है और एक समय में एक अनुरोध को संभालता है। उसके कारण, यह अधिक संसाधनों की खपत करता है।

अपाचे में कार्यकर्ता एमपीएम भी है जो अपाचे को एक बहु-प्रक्रिया, बहु-थ्रेडेड वेब सर्वर में बदल देता है। कार्यकर्ता MPM प्रत्येक थ्रेड के साथ कई बाल प्रक्रियाओं का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.