Batasi Penggunaan Memori Apache 2

9

Saya menjalankan server web hobi dari Blue & White G3 / 300 kuno yang menjalankan Debian PPC Squeeze 2.6.30. Performa tidak apa-apa untuk sementara waktu setelah restart, tetapi akhirnya semakin banyak macet. Saat ini pada 76 hari uptime, dan penyebab utama tampaknya adalah penggunaan memori 10+ proses apache2.

Saya pikir saya perlu menurunkan nilai untuk StartServers,, MinSpareServersdan / atau MaxSpareServers, tapi saya tidak yakin yang mana yang harus disesuaikan, dan ada tiga bagian untuk masing-masing tergantung pada modul mpm mana yang digunakan.

Bagaimana saya tahu bagian mana dari berikut ini yang perlu saya ubah, dan apa saja nilai wajar yang diberikan bahwa kotak tersebut memiliki 448 MB memori fisik (riwayat peningkatan aneh masing-masing 64, 128, dan 256 batang)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Tidak ada contoh lain dari StartServers di apache2.conf saya, tetapi tidak ada modul mpm yang muncul di mods-availableatau mods-enabled. Ide ide?

Terima kasih!

UltraNurd
sumber
Saya telah pergi dengan asumsi bahwa komputer Anda kehabisan memori (dan kinerja buruk Anda datang dari bertukar berat). Jika Anda tidak bertukar saya akan bug Anda untuk lebih jelasnya :-)
voretaq7

Jawaban:

6

400MB tidak banyak untuk server web hari ini - Anda mungkin ingin mempertimbangkan untuk mengganti kotak :)

Yang mengatakan, jika penggunaan memori Anda membengkak, Anda mungkin memiliki kebocoran memori di suatu tempat - untuk pengujian cepat melihat ukuran proses httpd sekarang, kemudian hentikan / mulai Apache & lihat apakah mereka jauh lebih kecil. Jika mereka mengawasi mereka selama beberapa hari dan melihat apakah mereka tumbuh.

Jika itu adalah kebocoran memori solusi nyata untuk itu adalah menemukan dan memperbaiki kebocoran memori, tetapi karena itu biasanya menyebalkan, Anda juga dapat menyesuaikan diri MaxRequestsPerChilddengan sesuatu selain 0 (tidak terbatas). Ini akan membunuh pekerja Apache ketika mereka telah melayani sejumlah permintaan tetap (memaksa mereka untuk menyerahkan memori mereka yang bocor dalam proses tersebut.

Mulailah dengan nilai yang lebih besar (dalam ribuan atau lebih) dan turunkan ke ratusan. Jika Anda mendapatkan di bawah 100 permintaan per anak, kebocoran memori Anda cukup besar untuk benar-benar memperbaikinya karena kinerjanya yang terus-menerus mematikan dan memunculkan kembali pekerja apache akan menjadi signifikan.


Re: mpm mana yang harus disesuaikan, jawabannya hampir pasti prefork.
Anda dapat menjalankan httpd -Vdan mencari Server MPM:garis yang akan memberi tahu Anda dengan pasti.

voretaq7
sumber
1
-V memberi saya informasi prefork yang saya butuhkan (meskipun itu apache2 -V dalam kasus saya). Terima kasih!
UltraNurd
Tampaknya telah melakukan trik. Saya pikir masalahnya adalah saya kehabisan memori fisik dan bertukar karena server anak terlalu banyak (masing-masing meraih sekitar 80 MB). Dan ya, saya tahu, server sudah tua. Tapi itu hampir tidak menangani permintaan apa pun: oD.
UltraNurd
1
Jika Anda tidak menangani banyak permintaan, Anda juga dapat memangkas jumlah Start & Spare server seperti yang Anda sebutkan di posting asli Anda (pada sistem pengembangan saya mengatur semuanya menjadi antara 2 & 5 untuk mengurangi penggunaan RAM)
voretaq7
Saya akhirnya menjatuhkan min dan max suku cadang ke 3 dan 6 dari 5 dan 10, dan itu tampaknya meninggalkan sisa RAM yang cukup untuk menjaga hal-hal dari swapping. Terima kasih!
UltraNurd
1

Untuk memoles penggunaan memori dari proses apache Anda akan ingin menyesuaikan MaxClients.

Aturan umum adalah: (Memori yang diinginkan Max) / (Penggunaan Memori dari 1 Proses Apache) = # Klien Maks

Pada akhirnya Anda juga perlu menyesuaikan Anda untuk menjadi MaxSpareServers <= Klien Maks .

Penggunaan memori dari satu proses sangat tergantung pada modul yang telah Anda muat (php dan sebagainya) sehingga Anda mungkin ingin mengatur Klien Max sedikit lebih rendah.


sumber