Limitare l'utilizzo della memoria di Apache 2


9

Sto eseguendo un server web hobby da un antico Blue & White G3 / 300 con Debian PPC Squeeze 2.6.30. Le prestazioni vanno bene per un po 'dopo un riavvio, ma alla fine diventano sempre più impantanate. Al momento sono attivi 76 giorni e il principale colpevole sembra essere l'utilizzo della memoria di oltre 10 processi apache2.

Penso di aver bisogno di abbassare i valori di StartServers, MinSpareServerse / o MaxSpareServers, ma non sono sicuro che uno per regolare, e ci sono tre sezioni per ogni seconda di quale modulo mpm è in uso.

Come faccio a sapere quale delle seguenti sezioni devo modificare e quali sono alcuni valori ragionevoli dato che la scatola ha 448 MB di memoria fisica (una strana cronologia degli aggiornamenti di uno ogni 64, 128 e 256 stick)?

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

Non ci sono altre istanze di StartServer nel mio apache2.conf, ma nessuno di quei moduli mpm appare in mods-availableo mods-enabled. Idee?

Grazie!


Ho assunto il presupposto che la tua scatola stia esaurendo la memoria (e le tue pessime prestazioni provengono dallo scambio pesante). Se non stai scambiando, ti darò bug per maggiori dettagli :-)
voretaq7,

Risposte:


6

Al giorno d'oggi 400 MB non sono molto utili per un server Web: potresti considerare di sostituire la scatola :)

Detto questo, se il tuo utilizzo della memoria è in mongolfiera, probabilmente hai una perdita di memoria da qualche parte - per un rapido test guarda subito la dimensione dei processi httpd, quindi ferma / avvia Apache e vedi se sono molto più piccoli. Se li stanno osservando per alcuni giorni e vedere se crescono.

Se si tratta di una perdita di memoria, la vera soluzione è quella di trovare e correggere la perdita di memoria, ma dal momento che di solito è un dolore nel culo puoi anche adattarti MaxRequestsPerChilda qualcosa di diverso da 0 (illimitato). Questo ucciderà i lavoratori di Apache quando avranno servito un numero fisso di richieste (costringendoli a rinunciare alla loro perdita di memoria nel processo.

Inizia con valori più grandi (a migliaia o giù di lì) e scendi a centinaia. Se ottieni meno di 100 richieste per bambino, la tua perdita di memoria è abbastanza grande da giustificare la sua correzione, dato che il colpo di performance derivante dall'uccisione costante e dalla rigenerazione dei lavoratori di Apache sarà significativo.


Ri: quale mpm regolare, la risposta è quasi certamente prefork.
Puoi correre httpd -Ve cercare la Server MPM:linea che ti dirà di sicuro.


1
-V mi ha dato le informazioni di prefork di cui avevo bisogno (anche se nel mio caso è apache2 -V). Grazie!
UltraNurd,

Sembra aver fatto il trucco. Penso che il problema fosse che stavo esaurendo la memoria fisica e scambiando perché troppi server figlio erano attivi (ognuno afferrando circa 80 MB). E sì, lo so, il server è vecchio. Ma gestisce a malapena qualsiasi richiesta: oD.
UltraNurd,

1
Se non stai gestendo molte richieste, puoi anche tagliare i conteggi del server Start & Spare come menzionato nel tuo post originale (sui sistemi di sviluppo li ho impostati su qualcosa tra 2 e 5 per ridurre l'utilizzo della RAM)
voretaq7

Ho finito per far cadere il minimo e il massimo di pezzi di ricambio da 3 a 6 da 5 e 10, e questo sembra lasciare abbastanza RAM rimanente per evitare che le cose si scambino. Grazie!
UltraNurd,

1

Per limitare l'uso della memoria del processo apache, dovrai regolare MaxClients.

La regola pratica comune è: (Memoria massima desiderata) / (Utilizzo memoria di 1 processo Apache) = # Max client

Alla fine è inoltre necessario modificare MaxSpareServers <= Max client .

L'utilizzo della memoria di un processo dipende fortemente dai moduli che hai caricato (php e così via), quindi potresti voler impostare i Max Client un po 'più in basso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.