Optimasi penggunaan memori Apache

11

Apache menggunakan terlalu banyak memori server saya sehingga menyebabkan crash. Saya memiliki 4GB RAM di server.

Saya mencoba memperbaiki pengaturan Apache untuk meningkatkan kinerjanya, tetapi saya cukup baru dalam hal ini.

Saya mencoba mengikuti saran artikel ini tetapi saya tidak yakin bagaimana cara menghitungnya dan sepertinya saya memperburuknya.

Top saya berbunyi seperti:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

Jadi itu akan terjadi

MaxClients = 3000/ (322-37) = 10

Apakah itu benar? Juga, apa yang harus menjadi nilai untuk parameter lain seperti MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?

Apakah seseorang tolong bantu saya?

Memperbarui

Saya sudah mencoba apa yang kalian sarankan. Ini bekerja, tetapi hanya untuk sementara waktu. Setelah beberapa waktu setelah server dimulai penggunaan memori terus meningkat dan tidak pernah turun.

Maksudku, setelah saya memulai server, mari kita asumsikan ada 500 pengguna online. Server akan mengkonsumsi X RAM. 2 jam setelah itu, dengan 500 pengguna yang sama secara online, server akan mengkonsumsi 10X RAM.

Apakah ada cara untuk menghindari ini atau saya harus tetap menonton server dan memulai kembali dari waktu ke waktu?

Souljacker
sumber
1
saat menambahkan pembaruan ke pertanyaan Anda, harap edit yang asli daripada mengirim jawaban. Ini juga memiliki bonus tambahan menabrak pertanyaan ke bagian atas halaman depan lagi.
Ben Pilbrow

Jawaban:

14

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 MaxClientsadalah 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 topdan tekan Muntuk 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.
uesp
sumber
MaxClients telah diubah namanya menjadi MaxRequestWorkers dimulai dengan Apache 2.4.
jastram