Saat ini saya memiliki server Apache2 yang berjalan dengan mpm-prefork
dan mod_php
pada VPS OpenVZ dengan 512M real / 1024M burstable RAM (tanpa swap). Setelah menjalankan beberapa tes, saya menemukan bahwa ukuran proses maksimum yang didapat Apache adalah 23M, jadi saya telah menetapkan MaxClients
ke 25 (23M x 25 = 575 MB, ok untuk saya). Saya memutuskan untuk menjalankan beberapa tes beban di server saya, dan hasilnya membuat saya bingung.
Saya menggunakan ab
di mesin desktop saya meminta halaman utama dari blog wordpress.
Ketika saya menjalankan ab
dengan 24 koneksi bersamaan, semuanya tampak baik-baik saja. Tentu, CPU naik, RAM bebas turun, dan hasilnya sekitar 2-3s waktu respons per permintaan.
Tetapi jika saya menjalankan ab
dengan 25 koneksi bersamaan (batas server saya), Apache hanya hang setelah beberapa detik. Itu mulai memproses permintaan, kemudian berhenti merespons, CPU kembali ke idle 100% dan ab
waktu habis. Log Apache mengatakan sudah tercapai MaxClients
.
Ketika ini terjadi, Apache tetap terkunci dengan 25 proses yang berjalan (mereka semua dalam "W" jika saya memeriksa status server) dan hanya setelah TimeOut
pengaturan proses mulai mati dan server mulai merespons lagi (dalam kasus saya sudah diatur ke 45).
Pertanyaan saya: apakah itu perilaku yang diharapkan? Mengapa Apache mati begitu saja MaxClients
? Jika bekerja dengan 24 koneksi, bukankah seharusnya bekerja dengan 25, hanya mungkin mengambil lebih banyak waktu untuk menanggapi setiap permintaan dan mengantri sisanya?
Kedengarannya agak aneh bagi saya bahwa setiap anak yang berjalan ab
sendiri dapat membunuh server web hanya dengan mengatur koneksi bersamaan ke server MaxClients
.