Jawaban:
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
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=NAME
dengan skrip konfigurasi di mana NAME
nama 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_winnt
digunakan secara default). Berikut daftar sistem operasi dan MPM defaultnya:
beos
mpm_netware
mpmt_os2
prefork
( pembaruan untuk versi Apache ≥ 2,4 : prefork
, worker
, atauevent
, tergantung pada kemampuan platform)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 tersediampm_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 standarmpm_netware
Modul Multi-Pemrosesan menerapkan server web berulir eksklusif yang dioptimalkan untuk Novell NetWarempmt_os2
Hybrid multi-proses, MPM multi-threaded untuk OS / 2prefork
Menerapkan server web non-threaded, pra-forkingmpm_winnt
- Modul Multi-Pemrosesan ini dioptimalkan untuk Windows NT.worker
- Multi-Processing Module menerapkan web server multi-threaded multi-proses hybridSekarang, untuk perbedaan antara prefork
dan worker
.
The prefork
MPM
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 worker
MPM 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).
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.
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
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
apachectl -V
dan lihat output di sebelah Server MPM
. Juga dapat memeriksa ps aux
dan mencari salah satu httpd
atau httpd.worker
.
apache2ctl -l
tidak berhasil; harus menggunakan apachectl -l
.
httpd -V
akan memberikan sesuatu seperti:Server MPM: worker
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
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.