Parameter utama untuk mengubah penggunaan memori Apache adalah MaxClients
. Nilai terlalu rendah dan Anda akan kehabisan slot yang tersedia untuk melayani permintaan klien. Terlalu banyak dan Anda akan menggunakan semua RAM Anda dan mulai menggunakan ruang swap yang akan mematikan kinerja (ini mungkin tampak seperti server crash).
Salah satu cara penyetelan MaxClients
adalah dengan mengamati penggunaan memori sistem dan mengubah pengaturan naik / turun sesuai kebutuhan. Jika server mulai menukar, edit ke bawah. Jika server memiliki memori bebas, pasang.
Anda juga dapat memperkirakan nilai maksimum dengan melihat penggunaan memori Apache. Mulai top
dan tekan M
untuk mengurutkan proses berdasarkan memori. Anda harus melihat sesuatu seperti:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Kurangi kolom RES dan SHR untuk mendapatkan perkiraan penggunaan memori per instance Apache. Dalam hal ini sekitar 16MB. Jika saya memiliki 4GB RAM dan berharap 3GB untuk digunakan untuk Apache, pengaturan MaxClients saya akan ada:
MaxClients = 3000/16 = 188
Jadi, dalam hal ini, saya mungkin mulai dengan nilai 150-200 tetapi saya akan menonton penggunaan memori dan jika itu mulai mendekati menggunakan swap saya akan mengurangi MaxClients 10-20%. Perhatikan juga bahwa nilai 3GB hanyalah contoh acak. Pada server yang hanya menjalankan Apache saya mungkin dapat menggunakan hampir semua 4GB. Dalam kasus lain saya mungkin hanya ingin 1 atau 2GB untuk Apache menyimpan sisanya untuk aplikasi lain, sistem atau cache.
Sunting: Menjawab Pertanyaan Tambahan
Pada umumnya tidak ada nilai ajaib MaxClients atau parameter konfigurasi Apache lainnya yang akan membuat server Anda tiba-tiba dua kali lebih cepat. Beberapa server akan tampak berjalan baik apakah MaxClients adalah 10 atau 1000. Ada dua kasus utama di mana pengaturan MaxClients "buruk":
- Terlalu Rendah : Ketika MaxClients terlalu rendah Anda akan mencapai situasi di mana semua klien Apache sedang digunakan dan koneksi baru masuk ke antrian menunggu klien berikutnya tersedia. Jika Anda mengaktifkan mod_status Apache Anda bisa mendapatkan tampilan waktu nyata dari berapa banyak klien yang sibuk pada satu titik waktu. Keadaan ini relatif mudah didiagnosis karena situs akan menjadi lambat pada saat lalu lintas tinggi dan semua klien dapat diamati sedang digunakan.
- Terlalu Tinggi : Ketika MaxClients terlalu tinggi Anda akan masuk ke kasus melelahkan semua RAM dan mulai menggunakan swap. Ketika ini terjadi, kinerja situs Anda pada dasarnya akan turun ke nol (pertimbangkan perbedaan kecepatan antara RAM dan disk). Keadaan ini bisa jauh lebih sulit untuk diamati dan didiagnosis karena server akan berjalan baik dengan MaxClients yang tinggi hingga mengalami lonjakan lalu lintas. Misalnya, di situs yang mendapatkan beberapa klik satu jam saya dapat mengatur MaxClients ke 1000, jauh lebih dari yang didukung oleh RAM, tetapi tidak pernah melihat masalah karena Apache hanya perlu menggunakan satu atau dua klien sekaligus. Saya hanya akan melihat masalah ketika saya mendapatkan lonjakan lalu lintas, meningkatkan jumlah klien yang digunakan secara bersamaan, sampai RAM habis dan ruang swap diperlukan.
Meskipun saya tidak tahu detail server, aplikasi, atau lalu lintas Anda, saya dapat menyarankan nilai konfigurasi berikut sebagai titik awal. Cobalah, pantau beban dan penggunaan server, dan ubah pengaturan sesuai kebutuhan.
- mod_status : Aktifkan ini sehingga Anda dapat melihat penggunaan Apache. Untuk statistik lebih lanjut, instal aplikasi pemantauan seperti Zabbix / Nagios sehingga Anda dapat melacak penggunaan server dan pola lalu lintas.
- MaxClients : Setel ke nilai 100-200. Saya akan mulai dengan nilai yang lebih rendah jika tidak yakin dan memonitor penggunaan memori / CPU / Apache. Ini akan menjadi parameter utama untuk mengubah.
- MaxRequestsPerChild : Ini menentukan kapan klien / anak Apache akan dimulai ulang. Tidak ada nilai yang salah (meskipun nilai yang sangat kecil mungkin tidak efisien) dan itu akan tergantung pada konten apa yang Anda sajikan. Untuk konten dinamis, nilai non-nol yang besar (misalnya 1000) akan menghentikan proses httpd Anda dari akhirnya menjadi terlalu besar.
- Parameter Lain : Walaupun saya belum melakukan benchmarking menyeluruh dari parameter yang tersisa, mereka seharusnya memiliki efek yang relatif kecil kecuali jika Anda mengaturnya ke nilai yang sangat rendah atau sangat tinggi. Menggunakan default harus baik untuk sebagian besar situs. Lihat dokumentasi modul Apache Prefork atau Worker untuk penjelasan lengkap tentang parameter dan yang digunakan di setiap modul (tidak ada gunanya mencoba menyetel parameter yang tidak Anda gunakan).
- Pembandingan : Ketika Anda menyesuaikan parameter, saya akan merekomendasikan menggunakan alat pembandingan seperti ab (ApacheBench) atau pengepungan untuk mendapatkan angka kuantitatif pada kemampuan server Anda. Mengandalkan satu-satunya perasaan atau lebih buruk, melihat apakah crash atau tidak, bukan metode yang baik untuk menyempurnakan parameter server web.