Solusi 1:
Saya memberi Anda jawaban untuk ini di komentar di Server tidak menanggapi SSH dan HTTP tetapi ping berfungsi, tetapi tampaknya Anda tidak mempercayai saya. Sungguh, itu benar!
Anda perlu ukuran MaxClients
/ ServerLimit
ke sistem Anda. "Pengaturan 5-10 untuk Server Min/Maks" yang Anda sebutkan pada dasarnya tidak relevan — itu hanya jumlah ekstra server berkeliaran tidak melakukan apa pun yang akan dipertahankan oleh Apache.
Untuk menyetel MaxClients dengan tepat, lihat tanda air tinggi pada umumnya untuk httpd
Anda (atau apache2
) proses, lalu bagi memori yang tersedia dengan itu. Lebih baik turun sedikit untuk memberikan sisa ruang sistem untuk bernafas. Karena Anda memiliki RAM 4GB, dan proses 185MB, itu berarti ServerLimit
Anda nilai paling banyak harus 21 — mungkin 20 atau 19.
Sekarang, mungkin 190MB itu tidak biasa. Anda dapat mengatur ServerLimit lebih tinggi, berdasarkan perkiraan penggunaan umum yang berbeda, tetapi pada dasarnya Anda berjudi bahwa Anda tidak akan pernah mengalami lonjakan. Jika itu terjadi, sistem Anda akan kehabisan memori.
Jika Anda dapat menemukan cara untuk membatasi penggunaan memori per pekerja, itu akan menjadi kemenangan. Saya bertaruh ini adalah kasus PHP Ate My RAM. Dapatkah Anda membuat kode aplikasi agar hidup dalam memory_limit
yang lebih rendah ? Jika Anda tidak dapat melakukannya, Anda memerlukan model lain untuk menjalankan PHP Anda. Jika Anda tidak dapat melakukannya, Anda perlu membeli lebih banyak RAM.
Solusi 2:
MPM prefork Apache mengelola sendiri server. Itu akan selalu dimulai dengan StartServers
daemon, dan tidak akan pernah menjalankan kurang dari MinSpareServers
setelah itu akan terjadi. Itu juga pada akhirnya akan menghentikan/mematikan server yang melebihi MaxSpareServers
jika mereka menganggur cukup lama (saya tidak ingat apa itu "Cukup Panjang" dalam konteks ini, atau jika/bagaimana itu dapat dimodifikasi).
ServerLimit
menyetel jumlah maksimum daemon apache yang dapat dijalankan pada waktu tertentu -- Inilah sebabnya mengapa dalam situasi Anda, Anda dapat memiliki ratusan proses apache yang sedang tidur (mereka muncul untuk melayani permintaan yang membanjir dan belum cukup lama menganggur untuk belum terbunuh oleh proses induk).
Secara pribadi menurut saya 1250 adalah nilai yang cukup tinggi untuk ServerLimit
/MaxClients
-- 250 mungkin angka yang lebih masuk akal (walaupun hal ini dapat mengakibatkan kesalahan 503/Server Busy sesekali jika Anda mendapatkan banyak permintaan:jika itu menjadi masalah kronis, Anda dapat menambah jumlah atau menambahkan lebih banyak server untuk menangani beban ).
Terkait pertanyaan ini dengan pertanyaan Anda sebelumnya Re:crash out-of-memory, ikuti panduan dari Apache Manual pada parameter ini:
Most important is that MaxClients be big enough to handle as many simultaneous
requests as you expect to receive, but small enough to assure that there is enough
physical RAM for all processes.
…dan aksioma pribadi saya:It's better to give a client a 503 page than knock the server down
. :)
Solusi 3:
Matikan Keepalives dan atur MaxClients ke 150. Alasan yang paling mungkin Anda memiliki 260 proses hanya duduk di sana adalah karena Apache dengan patuh menahan koneksi browser tetap terbuka karena KeepAlive aktif diatur dalam file konfigurasi apache Anda.