Saat ini di Apache 2 saya (tepatnya Apache 2.4.7) di Ubuntu 14.04, saya memiliki pengaturan ini:
/etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 100
MaxSpareServers 250
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Servernya adalah server Amazon 8GB (RAM) yang tidak lebih dari memuat formulir pendaftaran tiga halaman untuk beberapa kampanye iklan Google.
Saya menemukan skrip bernama apachetuneit.sh di web, tetapi kemudian setelah beberapa saat Apache melaporkan kesalahan ini:
[Sel 21 April 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: server mencapai pengaturan MaxRequestWorkers, pertimbangkan untuk meningkatkan pengaturan MaxRequestWorkers
Bagaimana saya bisa menilai cara mengatur pengaturan ini?
Saya meminta secara khusus hanya untuk bagaimana menyetel Apache 2.4 dan tidak ada yang lain. Inilah mengapa pertanyaan ini berbeda dari pertanyaan ini .
sumber
Jawaban:
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:
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.
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:
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.
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.
... 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:
sumber
sudo
perlu ditampilkan sebagai kode, bukan sebagai teks biasa. Saya mengikuti dokumentasi tentang pemformatan, tetapi masih berjuang di sini.Apa yang dapat Anda naikkan ke MaxRequestWorkers bergantung pada berapa banyak RAM yang diperlukan untuk setiap proses httpd / apache Anda. Jika masing-masing mengambil 50MB (hanya mengambil nomor acak), maka setiap 20 pekerja permintaan yang Anda gunakan sekaligus (yaitu koneksi konkuren) akan memakan 1GB. Jadi dalam contoh itu, Anda dapat memiliki paling banyak 8GB * 20 = 160 MaxRequestWorkers. Namun, Anda tidak dapat menggunakan semua RAM untuk apache, Anda perlu memesan beberapa untuk hal-hal lain yang berjalan di sana. Juga meninggalkan beberapa RAM cadangan dapat membantu untuk kinerja karena OS akan menggunakannya untuk men-cache hal-hal dan mempercepat kinerja (meskipun mungkin lebih baik untuk tidak kehabisan koneksi dibandingkan dengan server yang ekstra cepat karena situs akan tampak lambat sementara browser pengguna menunggu koneksi tersedia jika semuanya habis).
sumber
free
perintah untuk mendapatkan memori dasar. Kemudian tingkatkan jumlah proses yang berjalan dengan meningkatkan MinSpareServers, mulai ulang apache, jalankanfree
lagi, dan lakukan perhitungan. Lihat moreofless.co.uk/apache-memory-usage untuk detail dan penjelasan lebih lanjut.