Apache Prefork vs Worker MPM

113

Melihat file konfigurasi Apache, saya melihat MPM Prefork dan Pekerja ditentukan. Apa bedanya dan mana yang digunakan Apache?

Cory
sumber

Jawaban:

120

Prefork dan worker adalah dua jenis MPM apache. Keduanya memiliki kelebihan dan kekurangan.

Secara default, mpm adalah prefork yang aman untuk thread.

MPM prefork menggunakan beberapa proses anak dengan masing-masing satu utas dan setiap proses menangani satu koneksi dalam satu waktu.

MPM pekerja menggunakan beberapa proses anak dengan masing-masing banyak utas. Setiap utas menangani satu koneksi dalam satu waktu.

Untuk lebih jelasnya Anda dapat mengunjungi https://httpd.apache.org/docs/2.4/mpm.html dan https://httpd.apache.org/docs/2.4/mod/prefork.html

Arvind
sumber
11
Lihat juga "Bagaimana cara memilih Apache MPM yang akan digunakan?" serverfault.com/a/383634
Nazariy
@arvind // Setiap utas menangani satu koneksi pada satu waktu // di sini koneksi berarti pengguna tunggal atau permintaan tunggal?
tolong
21

Multi-Processing Modules (MPMs) Apache bertanggung jawab untuk mengikat port jaringan pada mesin, menerima permintaan, dan mengirim turunan untuk menangani permintaan ( http://httpd.apache.org/docs/2.2/mpm.html ).

Mereka seperti modul Apache lainnya, kecuali bahwa hanya satu dan hanya satu MPM yang harus dimuat ke server setiap saat . MPM dipilih selama konfigurasi dan dikompilasi ke dalam server dengan menggunakan argumen --with-mpm=NAMEdengan skrip konfigurasi di mana NAMEnama MPM yang diinginkan.

Apache akan menggunakan MPM default untuk setiap sistem operasi kecuali sistem operasi yang berbeda dipilih pada waktu kompilasi (misalnya pada Windows mpm_winntdigunakan secara default). Berikut daftar sistem operasi dan MPM defaultnya:

  • BeOS beos
  • Netware mpm_netware
  • OS / 2 mpmt_os2
  • Unix / Linux prefork( pembaruan untuk versi Apache ≥ 2,4 : prefork, worker, atauevent , tergantung pada kemampuan platform)
  • Windows mpm_winnt

Untuk memeriksa modul apa saja yang dikompilasi ke dalam server gunakan opsi baris perintah -l( berikut dokumentasinya). Misalnya pada instalasi Windows Anda mungkin mendapatkan sesuatu seperti:

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

Mulai versi 2.2, berikut adalah daftar fitur inti dan modul MPM yang tersedia :

  • core - Fitur Core Apache HTTP Server yang selalu tersedia
  • mpm_common - Kumpulan arahan yang diimplementasikan oleh lebih dari satu modul multi-pemrosesan (MPM)
  • beos - Modul Multi-Pemrosesan ini dioptimalkan untuk BeOS.
  • event - Varian eksperimental dari MPM pekerja standar
  • mpm_netware Modul Multi-Pemrosesan menerapkan server web berulir eksklusif yang dioptimalkan untuk Novell NetWare
  • mpmt_os2 Hybrid multi-proses, MPM multi-threaded untuk OS / 2
  • prefork Menerapkan server web non-threaded, pra-forking
  • mpm_winnt - Modul Multi-Pemrosesan ini dioptimalkan untuk Windows NT.
  • worker - Multi-Processing Module menerapkan web server multi-threaded multi-proses hybrid

Sekarang, untuk perbedaan antara preforkdan worker.

The preforkMPM

mengimplementasikan web server non-threaded, pre-forking yang menangani permintaan dengan cara yang mirip dengan Apache 1.3. Ini sesuai untuk situs yang perlu menghindari threading untuk kompatibilitas dengan pustaka non-thread-safe. Ini juga merupakan MPM terbaik untuk mengisolasi setiap permintaan, sehingga masalah dengan satu permintaan tidak akan memengaruhi yang lain.

The workerMPM alat hibrida multi-proses multi-berulir server dan memberikan kinerja yang lebih baik, karena itu harus disukai kecuali ada yang menggunakan modul lain yang mengandung non-benang-aman perpustakaan (lihat juga diskusi ini atau ini pada Serverfault).

pengguna2314737
sumber
1
Instalasi default ubuntu-trusty-64 dari apache 2.4.7 menggunakan event MPM
Federico
9

Lihat ini untuk detail lebih lanjut. Ini mengacu pada bagaimana Apache menangani banyak permintaan. Preforking, yang merupakan default, memulai sejumlah proses Apache (2 secara default di sini, meskipun saya yakin seseorang dapat mengkonfigurasi ini melalui httpd.conf). MPM pekerja akan memulai utas baru per permintaan, yang menurut saya, lebih hemat memori. Secara historis, Apache telah menggunakan prefork, jadi ini adalah model yang teruji lebih baik. Threading hanya ditambahkan di 2.0.

hd1
sumber
3
Bagaimana dengan Event MPM?
Vince Kronlein
6

Untuk CentOS 6.x dan 7.x (termasuk Amazon Linux) gunakan:

sudo httpd -V

Ini akan menunjukkan kepada Anda MPM mana yang dikonfigurasi. Baik prefork, worker, atau event. Prefork adalah model threadsafe sebelumnya. Worker multi-threaded, dan event mendukung php-mpm yang seharusnya menjadi sistem yang lebih baik untuk menangani thread dan permintaan.

Namun, hasil Anda mungkin berbeda-beda, berdasarkan konfigurasi. Saya telah melihat banyak ketidakstabilan di php-mpm dan tidak ada peningkatan kecepatan. Laba-laba yang agresif dapat menghabiskan proses turunan secara maksimal dalam php-mpm dengan cukup mudah.

Pengaturan prefork, worker, atau event diatur di sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (untuk 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
jeffmcneill
sumber
3

Anda dapat mengetahui apakah Apache menggunakan preform atau worker dengan mengeluarkan perintah berikut

apache2ctl -l

Dalam keluaran yang dihasilkan, cari menyebutkan prefork.c atau worker.c

Rimu Atkinson
sumber
8
Apache dapat dikompilasi dengan kedua modul MPM jadi ini tidak selalu dapat diandalkan. Jika ada daftar dua modul MPM coba apachectl -Vdan lihat output di sebelah Server MPM. Juga dapat memeriksa ps auxdan mencari salah satu httpdatau httpd.worker.
reflexiv
2
Dalam kasus saya apache2ctl -ltidak berhasil; harus menggunakan apachectl -l.
Vacilando
2
tidak ada yang terdaftar untuk saya, namun apache berfungsi dengan baik, Apache / 2.4.7 (Ubuntu)
karatedog
2
Di centos 7.x yang menjalankan apache 2.4.6, httpd -Vakan memberikan sesuatu seperti:Server MPM: worker
runamok
2

Sangat mudah untuk beralih antara prefork atau worker mpm di Apache 2.4 di RHEL7

Periksa jenis MPM dengan menjalankan

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"

Sekarang untuk mengubah MPM, edit file berikut dan hapus komentar MPM diperlukan

 /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
Harsimranjit Singh Kler
sumber
Mengapa ketika saya mencoba menggunakan mpm_worker atau mpm_event, halaman saya tidak berfungsi
Leoh
0

Apache memiliki 2 jenis MPM (Multi-Processing Modules) yang ditentukan:

1: Prefork 2: Pekerja

Secara default, Apacke dikonfigurasi dalam mode preforked yaitu web server pra-forking non-threaded. Itu berarti bahwa setiap proses turunan Apache berisi satu utas dan menangani satu permintaan dalam satu waktu. Karena itu, ia menghabiskan lebih banyak sumber daya.

Apache juga memiliki MPM pekerja yang mengubah Apache menjadi server web multi-proses dan multi-utas. MPM pekerja menggunakan beberapa proses anak dengan masing-masing banyak utas.

Rahul Chaubey
sumber