Berapa lama proses Apache tetap hidup?

9

Ketika apache melakukan proses untuk mod-php, berapa lama ia tetap hidup? Apakah proses mati segera setelah respons dikirim, atau akankah tetap hidup sampai browser menerima respons penuh?

Jamie Clinton
sumber

Jawaban:

9

Jika Anda menggunakan mod-php, maka kemungkinan Anda menggunakan preforkMPM, yang memunculkan proses anak untuk menangani permintaan. Jumlah dan masa hidup anak-anak ini sebagaimana diatur oleh arahan dalam file utama Anda apache2.conf(atau httpd.conf, tergantung pada distro Anda).

Cari bagian yang terlihat seperti ini (nilai Anda mungkin beragam):

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

Apache memunculkan StartServersanak-anak secara otomatis. Proses-proses ini akan menganggur sampai permintaan masuk. Jika anak-anak menjadi sibuk, itu akan menelurkan ke MaxClientsanak-anak untuk menangani beban, mencoba untuk menjaga MinSpareServersanak-anak yang menganggur untuk mengambil permintaan baru. Setelah semuanya tenang, anak-anak yang menganggur akan dibunuh sampai hitungannya turun MaxSpareServers.

Bit yang Anda tanyakan ditangani oleh MaxRequestsPerChild. Ditetapkan pada 0, ini berarti bahwa anak-anak dapat hidup selamanya, yang merupakan nilai default di sebagian besar instalasi apache. Ditetapkan pada hal lain, itu berarti setiap proses anak akan secara paksa dibunuh dan dimulai kembali, terlepas dari beban saat ini, setelah menangani jumlah permintaan itu.

Rincian lebih lanjut tentang MPM prefork di sini: http://httpd.apache.org/docs/2.2/mod/prefork.html

SmallClanger
sumber
Terima kasih, itu memberi saya pemahaman yang lebih baik tentang Apache. Pertanyaan spesifik saya adalah: ketika respons dikirim kembali ke klien, apa yang dilakukan proses anak? Apakah ia diam menunggu klien untuk mengakui atau dapat langsung menangani permintaan baru?
Jamie Clinton
Setelah respons dikirim dan klien mengakuinya, koneksi TCP tetap terbuka selama 15 detik, menurut saya, secara default. Selama waktu itu anak akan menjadi yang pertama menerima permintaan HTTP lebih lanjut dari klien yang sama. Jika tidak ada yang diterima maka koneksi TCP ditutup dan anak ditangani sesuai dengan aturan di atas. Biasanya itu tetap hidup dan kembali ke kolam idle. Perilaku ini dapat dimodifikasi oleh klien dan server. (Mungkin, misalnya, lebih disukai untuk menutup koneksi dengan segera)
SmallClanger
Juga, jika Anda belum menggunakannya, wireshark.org adalah alat yang hebat untuk menganalisis lalu lintas antara klien dan server. Ini akan memberi Anda wawasan besar tentang apa yang terjadi di bawah tenda.
SmallClanger
4

httpd tidak memotong proses untuk mod_php. Itu fork proses untuk dirinya sendiri, yang memiliki mod_php tertanam di dalamnya. Anak itu akan tetap hidup sampai telah memenuhi MaxRequestsPerChildpermintaan. mod_php sendiri akan terus menangani setiap permintaan untuk skrip PHP hingga skrip keluar atau batas waktu terlampaui.

Ignacio Vazquez-Abrams
sumber