Apache MPMs - Worker vs Prefork

13

Saya mencoba mencari tahu apa yang merupakan MPM Apache terbaik yang dapat saya instal di VPS saya. Saya melihat beberapa tolok ukur dan Pekerja MPM tampaknya berkinerja lebih baik daripada Prefork, tetapi untuk beberapa alasan semua orang tampaknya merekomendasikan Prefork over Worker untuk pengaturan PHP.

Apakah ini hanya karena beberapa fungsi PHP tidak aman? Hanya setlocale()terlintas dalam pikiran, tetapi saya akan menggunakan lokal yang sama pada setiap contoh jadi saya tidak berpikir itu akan menjadi masalah. VPS saya memiliki sedikit memori dan saya merasa MPM pekerja akan lebih cocok untuk kebutuhan saya, namun saya tidak yakin.

Dapatkah seseorang membantu saya mengambil keputusan tentang hal ini? Terima kasih!


PS: Saya juga sudah melihat nginx dan lighttpd. nginx kelihatannya luar biasa tapi saya mencoba untuk menghindari kompilasi dari sumber dan saya masih tidak mengerti untuk apa php-fpm. Mengenai lighttpd - itu luar biasa mudah untuk men-setup PHP / FCGI dengan itu, tapi saya mendengar bahwa ada kebocoran memori. Apakah ini masih benar?

Alix Axel
sumber
2
Masalahnya adalah bahwa sementara PHP inti sekarang seharusnya thread aman, ketika datang ke ekstensi, semua taruhan dimatikan.
mattdm

Jawaban:

12

Anda harus menggunakan prefork saat menggunakan apache + mod_php. FAQ dengan jelas menguraikan alasan mengapa:

http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2

Mengapa saya tidak boleh menggunakan Apache2 dengan MPM berulir di lingkungan produksi?

PHP adalah lem. Ini adalah lem yang digunakan untuk membangun aplikasi web yang keren dengan menempelkan lusinan perpustakaan pihak ketiga bersama-sama dan menjadikan semuanya tampak sebagai satu kesatuan yang koheren melalui antarmuka bahasa yang intuitif dan mudah dipelajari. Fleksibilitas dan kekuatan PHP bergantung pada stabilitas dan ketahanan platform yang mendasarinya. Perlu OS yang berfungsi, server web yang berfungsi, dan perpustakaan pihak ketiga yang berfungsi untuk merekatkan bersama. Ketika salah satu dari ini berhenti bekerja, PHP membutuhkan cara untuk mengidentifikasi masalah dan memperbaikinya dengan cepat. Ketika Anda membuat kerangka dasar yang lebih kompleks dengan tidak memiliki utas eksekusi yang sepenuhnya terpisah, segmen memori yang sepenuhnya terpisah dan kotak pasir yang kuat untuk setiap permintaan untuk bermain, kelemahan lebih lanjut dimasukkan ke dalam sistem PHP.

nginx + php-fpm juga merupakan cara terbaik untuk menjalankan aplikasi php. nginx memiliki dukungan asli untuk FastCGI dan php-fpm adalah salah satu cara terbaik untuk menjalankan php di lingkungan FastCGI. Lihat dokumentasi php di sini:

http://www.php.net/manual/en/install.fpm.php

dialt0ne
sumber
Mengenai Apache MPM, saya pikir saya mengerti, prefork adalah cara yang harus dilakukan. Saya cenderung ke pengaturan nginx atau lighttpd karena tingginya konsumsi memori Apache. Lighttpd dan PHP-FCGI bekerja di luar kotak ketika menginstal dengan aptitude, namun saya tidak yakin apakah memori bocor yang terus dibicarakan orang di 06/07 masih ada. Saya juga membaca Nginx memiliki penggunaan CPU yang lebih rendah tetapi saya tidak bisa menggunakannya dengan PHP-CGI apalagi dengan PHP-FPM. Apakah ada cara mudah untuk menginstal ini di Ubuntu menggunakan manajer paket? Apakah Anda merekomendasikan membaca tentang subjek ini?
Alix Axel
Dengan multiverse diaktifkan, saya dapat "apt-get install nginx" pada jernih dan berjalan seperti jagoan - Saya menggunakan pada sistem produksi. Ada contoh titik awal yang baik di sini, howtoforge.com/... tetapi seperti biasa YMMV.
dialt0ne
Saya dapat menginstal nginx menggunakan apt tetapi saya gagal untuk mengikatnya ke penerjemah PHP. Tautan yang Anda berikan memiliki sumber baru yang tampaknya menyediakan php5-fpmpaket. Saya akan mencobanya.
Alix Axel
Tautan ini mungkin lebih baik howtoforge.com/... Saya menggunakan repo brianmercer untuk sistem produksi saya untuk php5-fpm.
dialt0ne