Pertanyaan Masalah Apache MaxClients


Di log kesalahan saya, saya melihat:

server reached MaxClients setting, consider raising the MaxClients setting

Pengaturan MaxClients saya adalah 150. Namun ketika saya menghitung apa yang tampaknya pengaturan MaxClients optimal saya datang dengan:

Mem used by 1 Apache process = 16
Mem available to Apache = 197

MaxClients = 12 (197/16)

Jadi haruskah saya menjatuhkan MaxClients hingga ke angka 12 karena perhitungan saya menunjukkan bahwa semua RAM yang saya miliki tersedia atau haruskah saya menaikkan batas seperti yang disarankan oleh log kesalahan (atau apakah perhitungan saya tidak berguna karena saya salah memahami sesuatu)?


5
2018-02-13 23:59






Jawaban:


Pertimbangkan pengaturan KeepAlive Off di httpd.conf Anda jika Anda menjalankan prefork Apache. Daripada setiap anak yang memegang koneksi tidak aktif terbuka, Apache akan menutup setiap koneksi setelah memenuhinya. Ini akan mengurangi koneksi dan proses anak secara keseluruhan yang diperlukan untuk melayani. Itu menambah sedikit waktu ekstra karena setiap permintaan baru harus bernegosiasi ulang dengan server Anda daripada menggunakan kembali koneksi terbuka.

(sunting) Oh ya pertanyaannya. Saya akan meninggalkan MaxClients sendiri atau mengaturnya berdasarkan RAM yang Anda miliki. Dengan asumsi Anda memiliki lebih dari cukup RAM, rule of thumb adalah 2-4x jumlah core CPU yang Anda anggap backend Anda tidak terlalu lambat, yang lain menggunakan RAM sebagai faktor pembatas. Namun saya pikir mematikan KeepAlive akan menurunkan jumlah anak yang Anda butuhkan untuk sesuatu yang cukup normal dan Anda akan berhenti mencapai batas.

(edit2) Sekarang di sinilah ia menjadi rumit. Jika server Apache Anda adalah server aplikasi yang terutama menjalankan kode PHP, Ruby, dll dan memproses data yang didapatnya dari berbagai backend atau disk ke halaman yang ditampilkan, aturan 2-4x bekerja. Umumnya Anda akan membakar 250ms CPU per tampilan halaman jika halaman tanpa cache berat sehingga atau 4 tampilan halaman per inti. Jika Anda memiliki server yang berdiri sendiri, Anda akan dapat melayani lebih banyak permintaan karena banyak dari mereka akan berupa gambar kecil, css, js, dll yang biasanya akan dilayani dari set server lain untuk server aplikasi. Saya berasumsi Anda memiliki satu server sehingga meninggalkan semuanya sendiri mungkin dalam taruhan terbaik Anda.

Pada pekerjaan terakhir saya, kami menjalankan mesin frontend 8core / 8GB dengan 50 MaxClients dan KeepAlive Off yang bekerja cukup baik. Dalam beberapa kasus, menetapkan MaxClients ke 100 mendapat tolok ukur yang sedikit lebih baik, tetapi keseluruhan latensi pembuatan halaman meningkat karena sebagian besar waktu kami memblokir berbagai backend atau mulai kelaparan untuk CPU.


5
2018-02-14 00:32



Tidak benar-benar apa yang ingin pertanyaan tapi tetap akan membantu dengan masalah +1 - Jacob
Saya memiliki 4 inti sehingga akan menempatkan MaxClients saya pada 8-16 ... tetapi Anda mengatakan untuk meninggalkan MaxClients sendirian? Pergi dari 150 ke 16 tampaknya cukup drastis. Apakah Anda mengatakan itu tidak terlalu penting? Apakah itu sebabnya kamu mengatakan membiarkannya sendiri? - Lothar_Grimpsenbacher
Untuk menjawab pertanyaan Anda sederhananya, ya saya akan membiarkannya sendiri karena mungkin tidak masalah jika KeepAlive On benar-benar masalah Anda. - kashani


Daripada menjalankan perhitungan itu, saya akan bereksperimen untuk melihat apa yang benar-benar mampu ditangani oleh server Anda. Perhitungan itu lebih atau kurang garis panduan tetapi untuk memastikan tentang server Anda, Anda hanya perlu menekankan untuk mencari tahu apakah itu mungkin.


1
2018-02-14 00:05



Anda harus mempertimbangkan untuk memberikan instruksi atau tautan yang menjelaskan cara menekankan apache uji. Mengatakan "Anda hanya harus menekankannya" sama bermanfaatnya dengan mengatakan "baca halaman manual" - iainlbc
Seharusnya aku tidak memperhatikan, aku akan mengeditnya - Jacob