Yanıtlar:
Prefork ve worker, apache'nin sağladığı iki tür MPM'dir. Her ikisinin de avantajları ve dezavantajları var.
Öntanımlı olarak mpm, iş parçacığı için güvenli olan prefork'tur.
Prefork MPM, her biri bir evreye sahip birden çok çocuk süreç kullanır ve her işlem bir seferde bir bağlantıyı yönetir.
Worker MPM, her biri birçok iş parçacığı içeren birden çok alt süreç kullanır. Her iş parçacığı bir seferde bir bağlantıyı yönetir.
Daha fazla ayrıntı için https://httpd.apache.org/docs/2.4/mpm.html ve https://httpd.apache.org/docs/2.4/mod/prefork.html adresini ziyaret edebilirsiniz.
Apache'nin Çoklu İşlem Modülleri (MPM'ler), makinedeki ağ bağlantı noktalarına bağlanmaktan, istekleri kabul etmekten ve istekleri işlemek için çocukları göndermekten sorumludur ( http://httpd.apache.org/docs/2.2/mpm.html ).
Herhangi bir zamanda sunucuya yalnızca bir MPM yüklenmesi gerekmesi dışında, diğer Apache modülleri gibidirler . MPM'ler, yapılandırma sırasında seçilir ve istenen MPM'nin adı olan configure betiğiyle bağımsız değişken kullanılarak sunucuya derlenir .--with-mpm=NAME
NAME
Apache, derleme sırasında farklı bir işletim sistemi seçilmediği sürece her işletim sistemi için varsayılan bir MPM kullanacaktır (örneğin Windows'ta mpm_winnt
varsayılan olarak kullanılır). İşletim sistemlerinin listesi ve varsayılan MPM'leri:
beos
mpm_netware
mpmt_os2
prefork
( güncelleme 2.4 ≥ Apache versiyonu için : prefork
, worker
veya event
, platform yeteneklerine bağlı olarak)mpm_winnt
Sunucuda hangi modüllerin derlendiğini kontrol etmek için komut satırı seçeneğini kullanın -l
( belgeler burada verilmiştir ). Örneğin bir Windows kurulumunda aşağıdaki gibi bir şey elde edebilirsiniz:
> httpd -l
Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
Sürüm 2.2'den itibaren bu, mevcut temel özelliklerin ve MPM modüllerinin listesidir :
core
- Her zaman mevcut olan Core Apache HTTP Sunucusu özelliklerimpm_common
- Birden fazla çoklu işlem modülü (MPM) tarafından uygulanan bir yönerge koleksiyonubeos
- Bu Çoklu İşlem Modülü, BeOS için optimize edilmiştir.event
- Standart işçi MPM'sinin deneysel bir çeşidimpm_netware
Novell NetWare için optimize edilmiş özel olarak iş parçacıklı bir web sunucusu uygulayan Çoklu İşlem Modülümpmt_os2
OS / 2 için hibrit çok işlemli, çok iş parçacıklı MPMprefork
İş parçacıklı olmayan, çatallanma öncesi bir web sunucusu uygularmpm_winnt
- Bu Çoklu İşlem Modülü Windows NT için optimize edilmiştir.worker
- Çok iş parçacıklı çok işlemli bir hibrit web sunucusu uygulayan Çoklu İşlem ModülüŞimdi, arasındaki farka prefork
ve worker
.
istekleri Apache 1.3'e benzer bir şekilde işleyen iş parçacıklı olmayan, çatallanma öncesi bir web sunucusu uygular. İş parçacığı güvenli olmayan kitaplıklarla uyumluluk için iş parçacığından kaçınması gereken siteler için uygundur. Ayrıca, her bir isteği izole etmek için en iyi MPM'dir, böylece tek bir istekle ilgili bir sorun diğerlerini etkilemez.
worker
MPM uygulayan bir hibrit çoklu işlem çoklu dişli sunucu ve bir non-evreli kitaplıkları (bakınız ayrıca içeren diğer modüller kullanılarak sürece bu nedenle tercih edilmelidir, daha iyi performans veren bu tartışma veya bu ServerFault üzerine).
Bir göz atın bu Daha fazla ayrıntı için. Apache'nin birden çok isteği nasıl ele aldığını ifade eder. Ön tanımlı olan preforking, bir dizi Apache sürecini başlatır (burada varsayılan olarak 2, ancak bunu httpd.conf aracılığıyla yapılandırabileceğinizi düşünüyorum). Worker MPM istek başına yeni bir iş parçacığı başlatacak, tahmin ediyorum ki bu bellek daha verimli. Tarihsel olarak, Apache prefork kullanmıştır, bu nedenle daha iyi test edilmiş bir modeldir. Diş açma yalnızca 2.0'da eklendi.
CentOS 6.x ve 7.x için (Amazon Linux dahil) şunları kullanın:
sudo httpd -V
Bu size hangi MPM'lerin yapılandırıldığını gösterecektir. Ya prefork, işçi ya da olay. Prefork, daha önceki, iş parçacığı güvenli modeldir. Çalışan çok iş parçacıklıdır ve olay, iş parçacıklarını ve istekleri işlemek için daha iyi bir sistem olması beklenen php-mpm'yi destekler.
Ancak sonuçlarınız yapılandırmaya bağlı olarak değişebilir. Php-mpm'de çok fazla kararsızlık gördüm ve herhangi bir hız iyileştirmesi görmedim. Agresif bir örümcek php-mpm'deki maksimum çocuk süreçlerini oldukça kolay bir şekilde tüketebilir.
Prefork, worker veya event ayarı sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (CentOS 6.x / 7.x / Apache 2.4 için) içinde ayarlanır.
# 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
Apache'nin preformu mu işçi mi kullandığını aşağıdaki komutu vererek anlayabilirsiniz
apache2ctl -l
Ortaya çıkan çıktıda, prefork.c veya worker.c'den bahsetmeye bakın.
apachectl -V
ve yanındaki çıktıya bakın Server MPM
. Ayrıca veya ps aux
birini kontrol edip arayabilir . httpd
httpd.worker
apache2ctl -l
işe yaramadı; kullanmak zorunda kaldı apachectl -l
.
httpd -V
gibi bir şey verecektir:Server MPM: worker
RHEL7 üzerindeki Apache 2.4'te prefork veya worker mpm arasında geçiş yapmak kolaydır
MPM tipini çalıştırarak kontrol edin
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"
Şimdi MPM'yi değiştirmek için aşağıdaki dosyayı düzenleyin ve gerekli MPM'nin yorumunu kaldırın
/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
Apache'de 2 tür MPM (Çoklu İşleme Modülleri) tanımlanmıştır:
1: Ön çatal 2: İşçi
Varsayılan olarak, Apacke önceden çatallanmış modda, yani evreli olmayan çatallı önceden çatallanmış web sunucusunda yapılandırılmıştır. Bu, her Apache çocuk sürecinin tek bir evre içerdiği ve her seferinde bir isteği işlediği anlamına gelir. Bu nedenle daha fazla kaynak tüketir.
Apache ayrıca, Apache'yi çok işlemli, çok iş parçacıklı bir web sunucusuna dönüştüren çalışan MPM'ye sahiptir. Worker MPM, her biri birçok iş parçacığı içeren birden çok alt süreç kullanır.