Ketahuilah bahwa Ubuntu 14.04 menggunakan Apache 2 dengan PHP yang berjalan melalui modul mpm_prefork , di mana file yang dapat diedit ada di /etc/apache2/mods-enabled/mpm_prefork.conf. Juga, kenali bahwa mulai dari Apache 2.4, MaxClients sekarang diganti namanya menjadi MaxRequestWorkers , dan setiap dokumentasi mengenai MaxClients perlu dialihkan ke MaxRequestWorkers.
Hentikan layanan web Apache dengan perintah berikut, untuk sementara:
sudo service apache2 berhenti
- Tunggu 5 detik dan kemudian jalankan perintah berikut untuk mengetahui berapa banyak memori virtual yang Anda miliki di server yang gratis:
sudo gratis-ht
Baca baris Mem: dan lihat kolom gratis. Anggap ini sebagai jumlah RAM yang dapat Anda dedikasikan untuk Apache, walaupun saya biasanya suka mengurangi 2GB di server yang lebih besar (seperti di> 4GB), atau 1GB di server yang lebih ringan. Jadi, jika kolom gratis mengatakan saya punya 13GB gratis, saya akan merekomendasikan memberikan Apache 11GB. Itu garis dasar. Jika kami menemukan masalah basis data dalam log sesekali (seperti 3 kali dalam log selama periode 3 hari) yang membutuhkan lebih banyak memori, maka kami mungkin menganggap bahwa kami hanya memiliki 10GB untuk dimainkan daripada 11GB (dalam hal ini ). Jika kita menemukan log Apache bahwa server membutuhkan lebih banyak MaxRequestWorkers, maka itu adalah masalah terpisah yang akan saya bahas di bawah ini.
- Mulai server web Apache.
sudo service apache2 mulai
Buka seperti 10 tab browser, sambungkan ke beberapa halaman Anda yang lebih panjang atau lebih lambat dari situs web Anda, dan segarkan seperti 3-4 kali di setiap tab.
Setelah melakukan itu, cepat sekarang jalankan perintah berikut:
sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "Penggunaan Memori Apache (MB):" x / 1024; cetak "Ukuran Proses Rata-rata (MB):" x / ((y-1) * 1024)} '
Jalankan seperti 5 kali dengan cepat.
Lihatlah nilai Ukuran Proses Rata-rata dan nilai rata-rata yang keluar di antara 5 kali Anda menjalankannya.
Sekarang lakukan perhitungan berikut ini, dan pastikan untuk mengonversi GB ke MB seperlunya sehingga semua angka berada dalam nilai MB. Jadi, kalikan dengan 1024 atau bagi dengan 1024, tergantung pada arah mana Anda harus pergi.
MaxRequestWorkers = Bebas Baseline (dengan ruang buffer) / Ukuran Proses Rata-Rata
Sebagai contoh, saya memiliki server 14GB, tetapi ketika Apache dihentikan server menunjukkan bahwa ia menggunakan RAM 1GB dalam keadaan idle. Saya kemudian memberikan 1GB lain di beberapa ruang buffer tambahan untuk OS jika diperlukan. Itu berarti saya akan memiliki Baseline Gratis 12GB. Sekarang saya harus mengonversinya dari GB ke MB, jadi saya kalikan 12 x 1024 dan dapatkan 12288. 12288 MB adalah nilai Baseline Free saya. Dalam kasus saya, saya melihat bahwa Ukuran Proses Rata-rata adalah 21MB. Jadi, saya mengambil 12288/21 dan saya mendapatkan sekitar 585. Sekarang, sudah umum bahwa sysop menurunkan nilai ini, dan jadi saya mendapat 580.
- Edit file /etc/apache2/mods-enabled/mpm_prefork.conf dan pertimbangkan untuk menyetelnya ke default berikut, ganti XXX dengan perhitungan MaxRequestWorkers Anda:
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
Perhatikan bahwa Anda mungkin tidak melihat parameter ServerLimit di sana. Tambahkan itu. Parameter ini default ke 256 jika tidak ada, tetapi harus nilai yang sama dengan MaxRequestWorkers atau Anda akan mendapatkan kesalahan.
Faktor penting lain dalam konfigurasi Apache Anda adalah file /etc/apache2/apache2.conf dengan variabel Timeout dan diukur dalam hitungan detik. Ini adalah berapa lama Anda dapat mengirim atau menerima dari server sebelum habis waktu. Anda juga harus ingat mengunggah file atau mengunduh file, misalnya jika Anda memiliki situs web tempat orang dapat mengunggah atau mengunduh CSV atau file besar lainnya, misalnya. Dan Anda perlu mengingat server database yang sibuk dan di mana Anda mungkin perlu menyediakan beberapa waktu sebelum halaman habis. Semakin kecil Anda membuat variabel Timeout itu, semakin tersedia server web untuk menerima koneksi baru. Namun, perlu diketahui bahwa pengaturan nilai ini terlalu rendah dapat menyebabkan kekacauan dengan variabel sesi PHP, meskipun tidak dengan cookie berbasis sesi browser. Jadi, misalnya, nilai 300 (5 menit) mungkin bagus untuk server web yang bergantung pada variabel sesi PHP untuk alur kerja aplikasi web alih-alih cookie sesi browser. Nilai 45 mungkin bagus untuk server web yang hanya menampilkan laman landas iklan statis, tetapi akan sangat buruk untuk server yang perlu menggunakan variabel sesi PHP banyak. Jadi, edit parameter Timeout dalam file ini ke jumlah yang Anda butuhkan. Ini mungkin memerlukan beberapa pengujian dengan semua halaman web Anda untuk melihat apakah nilainya terlalu rendah. Namun, mungkin ide yang baik untuk tidak mengaturnya lebih tinggi dari 300 kecuali Anda melihat masalah dalam unggahan file besar atau unduhan file besar. tetapi akan mengerikan untuk server yang perlu menggunakan variabel sesi PHP banyak. Jadi, edit parameter Timeout dalam file ini ke jumlah yang Anda butuhkan. Ini mungkin memerlukan beberapa pengujian dengan semua halaman web Anda untuk melihat apakah nilainya terlalu rendah. Namun, mungkin ide yang baik untuk tidak mengaturnya lebih tinggi dari 300 kecuali Anda melihat masalah dalam unggahan file besar atau unduhan file besar. tetapi akan mengerikan untuk server yang perlu menggunakan variabel sesi PHP banyak. Jadi, edit parameter Timeout dalam file ini ke jumlah yang Anda butuhkan. Ini mungkin memerlukan beberapa pengujian dengan semua halaman web Anda untuk melihat apakah nilainya terlalu rendah. Namun, mungkin ide yang baik untuk tidak mengaturnya lebih tinggi dari 300 kecuali Anda melihat masalah dalam unggahan file besar atau unduhan file besar.
Sekarang restart layanan web Apache Anda. Jika Anda melakukan sesuatu yang salah, Apache kemungkinan akan memberi tahu Anda saat Anda memulainya lagi, dan Anda dapat memperbaikinya.
sudo service apache2 restart
- Sekarang ulangi trik 10 tab browser yang Anda lakukan sebelumnya, dan lihat apakah Anda menemukan kesalahan konfigurasi Apache di log kesalahan server web Apache:
sudo tail -f /var/log/apache2/error.log
... tekan CTRL + C untuk keluar dari itu, jika Anda mau.
Cari keluhan tentang kebutuhan MaxRequestWorkers (dan baru-baru ini sejak Anda me-restart server web). Jika Anda melihatnya bahkan dengan pengaturan MaxRequestWorkers yang optimal, maka Anda kemungkinan membutuhkan lebih banyak daya tembak untuk situs web atau aplikasi web Anda. Pertimbangkan opsi-opsi ini:
- Menggunakan CDN untuk mengunduh file besar, gambar, dan skrip.
- Menggunakan layanan caching seperti CloudFlare atau yang lainnya.
- Mengulangi strategi situs web atau aplikasi web Anda untuk menggunakan beberapa server web yang bertindak sebagai satu "aplikasi web" di belakang load balancer.
- Menambahkan lebih banyak RAM ke server, dan dengan demikian melakukan perhitungan ini lagi.
- Sekarang setelah server Apache disetel, itu semacam baseline disetel. Anda harus memeriksanya selama 2-3 minggu dan mencari masalah MaxRequestWorker di log kesalahan Apache. Dari itu, Anda dapat membuat keputusan tentang optimasi (lihat langkah 10). Anda juga dapat menginstal Munin dengan apt di Ubuntu dan melihat kinerja Apache dari waktu ke waktu dan merencanakan ide pertumbuhan sebelum Anda memutuskan untuk melakukan apa pun tentang jumlah lalu lintas yang ditangani server web.