Apache Prefork vs Worker MPM


113

Apache yapılandırma dosyasına baktığımda Prefork ve Worker MPM tanımlı görüyorum. Aradaki fark nedir ve Apache hangisini kullanıyor?

Yanıtlar:


120

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.


11
Ayrıca bkz. "Hangi Apache MPM'yi kullanacağımı nasıl seçerim?" serverfault.com/a/383634
Nazariy

@arvind // Her iş parçacığı bir seferde bir bağlantıyı yönetir // burada bağlantı tek kullanıcı mı yoksa tek istek mi? pls açıkla
user1844933

21

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=NAMENAME

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_winntvarsayılan olarak kullanılır). İşletim sistemlerinin listesi ve varsayılan MPM'leri:

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 özellikleri
  • mpm_common - Birden fazla çoklu işlem modülü (MPM) tarafından uygulanan bir yönerge koleksiyonu
  • beos - Bu Çoklu İşlem Modülü, BeOS için optimize edilmiştir.
  • event - Standart işçi MPM'sinin deneysel bir çeşidi
  • mpm_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ı MPM
  • prefork İş parçacıklı olmayan, çatallanma öncesi bir web sunucusu uygular
  • mpm_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 preforkve worker.

preforkMPM

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.

workerMPM 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).


1
Apache 2.4.7'nin ubuntu-trusty-64 varsayılan yüklemesi event MPM kullanıyor
Federico

9

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.


3
Peki ya Event MPM?
Vince Kronlein

6

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

3

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.


8
Apache, her iki MPM modülüyle de derlenebilir, dolayısıyla bu her zaman güvenilir değildir. İki MPM modülü listeliyorsa, deneyin apachectl -Vve yanındaki çıktıya bakın Server MPM. Ayrıca veya ps auxbirini kontrol edip arayabilir . httpdhttpd.worker
reflexiv

2
Benim durumumda apache2ctl -lişe yaramadı; kullanmak zorunda kaldı apachectl -l.
Vacilando

2
hiçbiri benim için listelenmemiş, ancak apache iyi çalışıyor, Apache / 2.4.7 (Ubuntu)
karatedog

2
Apache 2.4.6 çalıştıran centos 7.x'te, aşağıdaki httpd -Vgibi bir şey verecektir:Server MPM: worker
runamok

2

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

Mpm_worker veya mpm_event kullanmaya çalıştığımda neden sayfam çalışmıyor
Leoh

0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.