Bagaimana saya tahu jika apache berjalan sebagai prefork atau pekerja?

40

Bagaimana saya tahu jika apache sedang berjalan (atau dikonfigurasi untuk dijalankan) sebagai prefork atau pekerja?


sumber
2
atau lebih secara teknis 'dikompilasi untuk dijalankan sebagai'

Jawaban:

37

MPM dikonfigurasi pada waktu kompilasi. Salah satu cara untuk mengetahuinya adalah dengan membuat daftar modul yang dikompilasi. Daftar itu akan mencakup MPM yang dipilih. Daftar dapat diselesaikan menjalankan biner apache, dengan flag -l.

andreas@halleck:~$ apache2 -l
Compiled in modules:
 core.c
 mod_log_config.c
 mod_logio.c
 worker.c
 http_core.c
 mod_so.c
andreas@halleck:~$ 

Di sini kita menemukan modul worker.c, maka saya menjalankan MPM pekerja.

andol
sumber
4
Jawaban ini salah. Lihat jawaban saya.
Chris Johnson
1
Hm, di Ubuntu saya tidak memiliki daftar pekerja atau prefork saat melakukan ini ...
mlissner
2
Di Ubuntu Anda dapat menggunakan apache2ctl -Muntuk membuat daftar modul yang aktif.
SteffenNielsen
53

Jawaban yang diberikan oleh Series8217 dan Andol keduanya salah.

Pertanyaannya adalah, bagaimana cara mengetahui apakah Apache menjalankan prefork atau pekerja. Saran yang diberikan oleh jawaban lain hanya memberi tahu apa MPM default itu (berdasarkan modul yang dikompilasi), bukan jika standar itu atau pilihan lain sedang digunakan saat ini.

Jika httpd -Vmenunjukkan prefork, itu artinya prefork adalah MPM default yang dikompilasi. Itu dapat ditimpa dengan mengubah pengaturan file konfigurasi Apache, seperti yang ditunjukkan dalam proses ini:

  1. Edit file konfigurasi (mis. /etc/sysconfig/httpdPada CentOS / RedHat)
  2. Tambahkan atau batalkan komentar pada baris ini: HTTPD=/usr/sbin/httpd.worker
  3. Mulai ulang Apache

MPM mana yang benar-benar berjalan dapat ditunjukkan menggunakan proses ini:

  1. Aktifkan Apache mod_info
  2. Permintaan url mod_info, biasanya curl localhost/server-info
  3. Bagian "Pengaturan Server" akan menampilkan "Nama MPM: Pekerja"
  4. Jalankan httpd -Vlagi - masih akan menampilkan prefork, bukan pekerja

Intinya:

  • httpd -V menunjukkan opsi default, bukan opsi mana yang benar-benar digunakan

Ada jawaban di banyak situs web yang mengatakan, gunakan httpd -Vuntuk mengetahui apakah Apache menjalankan prefork atau pekerja. Mereka semua salah. Coba prosedur di atas untuk melihat sendiri.

Chris Johnson
sumber
FYI, menurut httpd.apache.org/docs/trunk/mpm.html MPM dapat berupa modul statis di semua platform, atau dibangun sebagai DSO (di Unix). Ketika dibangun sebagai modul statis, "Server harus dibangun kembali untuk mengubah MPM." Apakah dokumentasi apache salah tentang modul MPM statis tidak dapat diubah kecuali dengan membangun kembali server?
Steven T. Snyder
Ini terdengar sangat mirip dengan distro tertentu, dengan pembungkus tingkat yang lebih tinggi?
andol
2
Pada CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event dan /usr/sbin/httpd.worker adalah semua binari yang berbeda dengan MPM yang berbeda yang dikonfigurasi pada waktu kompilasi (masing-masing, acara awal, dan pekerja). Mengubah pengaturan HTTPD di / etc / sysconfig / httpd hanya mengontrol biner mana yang dijalankan oleh skrip init.
Paul Haldane
Saya harus menjalankan apache2 -V bukannya httpd -V di Ubuntu 16.04 LTS
cnizzardini
41

Di Ubuntu 14.04

a2query -M

Menceritakan event, prefork,worker

Anda dapat mengubahnya dengan menambahkan tautan simbolik mpm_<chosen>dari dari mods-availableke mods-enableddalam /etc/apache2.

Hanya satu yang diizinkan dalam satu waktu.

JorgeeFG
sumber
2
Ini perlu jawaban yang diterima.
ya, jawaban yang bagus! sederhana dan mengembalikan apa yang diperlukan
Flash Thunder
Bekerja untuk saya yang terbaik, terima kasih (bekerja pada apache 2.4 .... sepertinya itu tidak berfungsi pada apache 2.2)
dmikam
The eventMPM adalah, menurut situs Apache, "varian dari MPM pekerja dengan tujuan mengkonsumsi benang hanya untuk koneksi dengan proses aktif".
Jonathan Berger
7

Pada RedHat dan turunan, hanya peluncuran topatau ps auxdan melihat nama proses httpd:

  • httpd berarti Apache berjalan sebagai prefork
  • httpd.worker berarti dijalankan sebagai pekerja
Fiore Corrado
sumber
4

Pada RHEL / Fedora / etc, jalankan httpd -V. Anda akan mendapatkan beberapa output yang meliputi:

Server version: Apache/2.2.21 (Unix)
     ...
Architecture:   64-bit
Server MPM:     Prefork
     ...

Di sini 'Server MPM' adalah 'Prefork', jadi server saya menjalankan MPM prefork.

Steven T. Snyder
sumber
Jawaban ini salah. Lihat jawaban saya.
Chris Johnson
@ ChrisJohnson, penemuan menarik ... Pemahaman saya adalah bahwa MPM tidak dapat diubah oleh konfigurasi, hanya dengan kompilasi. Tampaknya OP berpikiran sama, karena ia mengomentari pertanyaannya dengan "atau lebih teknis 'dikompilasi untuk dijalankan sebagai'". Saya akan melihat ke mereproduksi jawaban Anda dan begitu saya sudah mengkonfirmasi saya akan mencabut jawaban saya.
Steven T. Snyder
Saya mengkonfirmasi melalui dokumentasi apache di httpd.apache.org/docs/trunk/mpm.html bahwa MPM dapat dibangun sebagai modul DSO dan secara dinamis dimuat dengan direktif LoadModule, pada "Unix dan platform serupa". Jadi MPM memang dapat diubah pada waktu pengambilan dalam keadaan tertentu (yang mungkin merupakan konfigurasi paling umum hari ini ..)
Steven T. Snyder
4

Chris Johnson benar. Pergi ke httpd.conf => tambahkan baris ini:

<Location /server-info>
SetHandler server-info
</Location>

Restart apache: /etc/init.d/httpd restart. Kemudian akses localhost / server-info oleh browser Anda dan lihat bagian Nama MPM .

songpham
sumber
Yang lebih bagus lagi, tuliskan di antara <IfModule info_module> </IfModule>
Lexib0y
3

Berikut adalah metode lain yang saya harapkan dapat diandalkan dalam menentukan MPM mana yang digunakan. Tambahkan yang berikut ke Anda httpd.conf:

<IfModule prefork.c>
    Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
    Header append X-MPM worker
</IfModule>

Kemudian periksa tajuk menggunakan curl -I localhost | grep X-MPM.

Rekomendasi Quinn
sumber
3

pada centos (atau rhel) Anda dapat menjalankan perintah ini:

ps -ef | grep httpd

jika Anda melihat /usr/sbin/httpd.workersedang berlari, maka itu menggunakan MPM pekerja. jika Anda melihat /usr/sbin/httpdberjalan, maka itu menggunakan prefork

james turner
sumber
2

Jawaban dari Chris Johnson benar.

Setelah mengaktifkan modul info, seperti yang didokumentasikan dalam Dokumentasi Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), liner yang satu ini akan memberi Anda MPM yang Anda gunakan:

links -dump http://localhost/server-info/?server | grep "MPM Name"
Manu
sumber
2

Salah satu cara yang saya temukan di Debian seperti distro, adalah dengan menjalankan:

apachectl -V | grep -i mpm
Hex
sumber