Dari http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
Masalah perangkat keras terbesar yang mempengaruhi kinerja server web adalah RAM. Server web tidak boleh pernah bertukar, karena bertukar meningkatkan latensi setiap permintaan di luar titik yang dianggap pengguna "cukup cepat". Ini menyebabkan pengguna menekan berhenti dan memuat ulang, semakin menambah beban. Anda dapat, dan harus, mengontrol pengaturan MaxClients sehingga server Anda tidak menelurkan begitu banyak anak yang mulai bertukar. Prosedur untuk melakukan ini sederhana: tentukan ukuran rata-rata proses Apache Anda, dengan melihat daftar proses Anda melalui alat seperti atas, dan bagilah ini menjadi total memori yang tersedia, sisakan ruang untuk proses lain.
Masalah utama adalah bahwa saya tidak dapat memahami bagaimana mengetahui ukurannya, karena, saya memiliki ukuran httpd tidak lebih dari 3888.
Tapi, jika kita perlu menentukan angka untuk MaxClients, dan saya memiliki 4GB RAM, jadi saya mendapatkan: 972, jadi saya harus menggunakan seperti 900 di MaxClients?
sumber
Jawaban:
Pertama, tentukan PID dari salah satu proses Apache Anda.
Maka Anda dapat melakukan sesuatu seperti ini:
cat /proc/PIDHERE/status | grep VmRSS
Ini akan menghasilkan ukuran resident-set-saat (saat ini) dari proses tertentu, mirip dengan:
VmRSS: 304456 kB
Nilai ini seperti kedengarannya, itu adalah ukuran dari proses penduduk di RAM.
Kemudian normalisasikan satuan ukuran Anda (
4GB * 1024 * 1024 = 4,194,304 KB
). Membagi:4194304 KB / 304456 KB = 13.77 processes
Pertimbangkan bahwa Anda mungkin memiliki proses lain yang berjalan pada sistem Anda yang akan mengkonsumsi memori juga, dan idealnya Anda ingin meminimalkan pertukaran, karena itu Anda tidak akan ingin 13 Apache MaxClients dikonfigurasi (menggunakan nomor saya), Anda ingin jumlah yang lebih sedikit (sesuai kebijakan Anda) ).
Ini adalah perkiraan kasar; ukuran proses Apache Anda dapat tumbuh seiring waktu tergantung pada beban.
sumber
Memprediksi maxClients dari skenario pengujian adalah titik awal - tetapi untuk menyelesaikan masalah dengan benar, Anda perlu mulai mengukur bagaimana aplikasi Anda berperilaku dengan lalu lintas nyata.
Dengan asumsi apache Anda menjalankan pre-fork ....
Atur tugas cron untuk menghitung jumlah proses httpd dan output 'gratis'. Perhatikan bahwa jika server web Anda menyajikan konten apa pun dari file lokal (dan dalam banyak kasus, bahkan ketika tidak) jumlah memori yang tersedia untuk cache / buffer akan memiliki dampak besar pada kinerja. yaitu jika Anda sampai pada titik swapping, kinerja web Anda mungkin mengerikan!
Setelah Anda mendapatkan beberapa data, plot pada grafik dan lakukan regresi kuadrat terkecil di atasnya - memperkirakan untuk menemukan jumlah klien di mana Anda mencapai batas target Anda untuk penggunaan memori httpd. Titik awal untuk target memori akan menjadi lebih kecil dari 80% dari memori fisik / 80% dari ukuran konten.
(perhatikan jika MinSpareServers Anda disetel ke nilai yang sangat tinggi, hasilnya mungkin tidak akurat)
Di dunia yang ideal, Anda juga akan mengukur waktu respons URL dalam file log yang sama - tetapi itu menjadi jauh lebih kompleks.
sumber