Cara Tune Apache di Ubuntu 14.04 Server

18

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 .

ServerChecker
sumber
kemungkinan duplikat dari Bagaimana Anda melakukan pengujian beban dan perencanaan kapasitas untuk situs web?
Jenny D mengatakan Reinstate Monica
@ JennyD Artikel itu terlalu luas untuk kebutuhan spesifik ini.
ServerChecker
Cara Anda menilai pengaturan khusus ini adalah Anda melakukan pengujian beban.
Jenny D mengatakan Reinstate Monica
@ JennyD Itu bahkan lebih mudah dari itu. Cukup gunakan skrip ap.sh di bawah pemuatan reguler beberapa kali dalam sehari dan rata-rata, lakukan matematika per tautan layanan cloud di bawah ini, dan atur MaxRequestWorkers ke nilai itu. Kemudian, tonton log Apache untuk masalah dengan MaxRequestWorkers dan tingkatkan, tambahkan lebih banyak RAM, tambahkan CloudFlare, atau tambahkan node web lainnya. Tidak perlu melakukan pengujian beban yang sangat intens.
ServerChecker
Anda dapat menulis jawaban yang berisi informasi tentang skrip itu, dan hal-hal yang relevan dari tautan yang Anda masukkan dalam jawaban Anda sendiri, untuk pertanyaan yang saya tunjuk sebagai kemungkinan duplikat.
Jenny D berkata Reinstate Monica

Jawaban:

45
  1. 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.

  2. Hentikan layanan web Apache dengan perintah berikut, untuk sementara:

    sudo service apache2 berhenti
  1. 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.

  1. Mulai server web Apache.
    sudo service apache2 mulai
  1. 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.

  2. 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.

  1. 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.

  1. 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.

  2. 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
  1. 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.

  1. 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.
ServerChecker
sumber
“Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban khusus tautan dapat menjadi tidak valid jika halaman tertaut berubah. ”
Jenny D mengatakan Reinstate Monica
@ Jenny Good point! Saya akan melakukannya.
ServerChecker
@Moderator Saya perlu bantuan format jawaban ini. Langkah 7 seharusnya file conf dengan indentasi. Langkah 11 tidak seharusnya diberi indentasi. Perintah kode yang dimulai dengan sudoperlu ditampilkan sebagai kode, bukan sebagai teks biasa. Saya mengikuti dokumentasi tentang pemformatan, tetapi masih berjuang di sini.
ServerChecker
1
Saya melakukan apa yang saya bisa - penurunan harga benar-benar tidak melakukan daftar campuran dan kode dengan sangat baik, tapi saya pikir saya berhasil mendapatkannya sedikit lebih baik.
Jenny D mengatakan Reinstate Monica
untuk centos newbies seperti saya: ps -lyU apache bukan ps -ylC apache2
user1928596
3

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).

G491
sumber
Apa cara yang baik untuk membuat profil ini? Perintah apa yang bisa saya ketik untuk melihat berapa banyak RAM yang digunakan oleh setiap proses apache saat memuat? Kami juga membutuhkan ruang RAM untuk MySQL (situs WordPress) dan proses sistem normal juga.
ServerChecker
Lihat berapa banyak proses yang berjalan dan jalankan freeperintah untuk mendapatkan memori dasar. Kemudian tingkatkan jumlah proses yang berjalan dengan meningkatkan MinSpareServers, mulai ulang apache, jalankan freelagi, dan lakukan perhitungan. Lihat moreofless.co.uk/apache-memory-usage untuk detail dan penjelasan lebih lanjut.
g491
Saya sekarang belajar bahwa ada cara super cepat untuk melakukan ini. Itu diuraikan dalam tautan cloudinservice.com dalam jawaban saya di bawah ini. Perintahnya adalah ap.sh yang seseorang temukan. Juga, saya mengetahui bahwa MaxClients sekarang telah diganti namanya menjadi MaxRequestWorkers di Apache 2.4+.
ServerChecker