utilizzo della memoria httpd


13

Problemi con l'utilizzo della memoria httpd( Apache/2.2.29).

Nel tempo, l'utilizzo della memoria nei httpdprocessi aumenta fino a raggiungere il 100%.

L'ultima volta che ho riavviato è httpdstato circa 24 ore fa. L'output da free -mè:

[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655       1415        239          0        202        424
-/+ buffers/cache:        788        866
Swap:         1023          4       1019

Per dimostrare che è sicuramente httpd, ho riavviato httpded eseguito di free -mnuovo:

[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655        760        894          0        202        360
-/+ buffers/cache:        197       1457
Swap:         1023          4       1019

Quindi, il riavvio di Apache richiede memoria libera da 239 Mb a 894 Mb, il che sembra un grande salto.

Ho esaminato l'elenco dei moduli Apache attualmente abilitati (ce ne sono molti) e disabilitati / rimossi mod_wsgie mod_perl(nessuno dei quali è richiesto per questo server, che esegue un'applicazione Web basata su PHP - Magento, in particolare).

Basato su https://servercheck.in/blog/3-small-tweaks-make-apache-fly , ho eseguito ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'e ho ottenuto il seguente output:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' 15.1328 MB 118.09 MB 127.449 MB 129.059 MB 117.734 MB 113.824 MB 125.062 MB 123.922 MB 119.855 MB 108.066 MB 136.23 MB 114.031 MB 113.27 MB 110.695 MB 102.113 MB 113.234 MB 186.816 MB 118.602 MB 0.835938 MB

L'esecuzione dell'altro strumento di diagnosi suggerito per il MaxClientsquale viene ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'restituito quanto segue:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB

Questo server ( m1.smallistanza Amazon AWS ) dispone 1.7 Gbdi RAM. Perciò:

Ulteriori suggerimenti / suggerimenti su come modificare al meglio le httpdimpostazioni o su come diagnosticare cosa potrebbe causare esattamente questo?


Si noti che per controllare l'utilizzo della memoria da parte dei processi è necessario guardare la -/+ buffers/cachelinea; tuttavia in questo caso la modifica è comparabile. A seconda di come è stato messo a punto apache, potrebbe iniziare con solo un paio di processi pronti per la gestione delle richieste; dopo un periodo di molte richieste simultanee ci saranno probabilmente più processi biforcati per gestire il carico. È anche possibile regolare il numero di processi inattivi. Quindi, se apache cresce per usare troppa memoria, è necessario eseguire alcune regolazioni.
wurtel,

Sto bene con la configurazione del server Apache ma in passato non ho fatto molto in termini di ottimizzazione delle prestazioni per Apache. Qualche suggerimento su quali direttive dovrei guardare o guide? Esiste un'impostazione di configurazione che posso abilitare per dire ad Apache di terminare i processi biforcati dopo un certo periodo di tempo? (Sembra che Apache non lo faccia per impostazione predefinita per qualche motivo.)
James Spittal,

Questo è il motivo esatto per cui mi sono allontanato da Apache ... prova Nginx o anche Lighttpd.

Interessante. Ho sentito cose positive, nginxquindi forse è il momento di provarlo, ma onestamente, utilizzo Apache da anni e non ho mai avuto grossi problemi. Magento mastica davvero la memoria però.
James Spittal,

Nota che il tuo script per calcolare l'utilizzo medio di memoria include l'utilizzo di memoria insufficiente del processo grep httpd(almeno per me). Per risolvere il problema, consiglierei di escludere quella riga dal calcolo in questo modo:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
MaPePeR

Risposte:


11

Ecco cosa ho fatto per "risolverlo":

  1. Imposta MaxClients 7(basato su (1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748)

Perciò:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients         7
MaxRequestsPerChild  4000
</IfModule>
  1. Disabilitare tutti i moduli Apache tranne authz_host_module, log_config_module, expires_module, deflate_module, setenvif_module, mime_module, autoindex_module, negotiation_module, dir_module, alias_module, rewrite_module,php5_module

  2. Rimuovere il mod_sslpacchetto dal momento che il client non utilizza https://affatto.

Riporterò una volta che questa nuova configurazione è in esecuzione da un po 'per vedere se questo risolve.

Qualche ispirazione qui è stata presa in prestito da: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ecommerce/ e http://www.activoinc.com/ download / httpd.conf-Magento


La configurazione sopra ha sicuramente aiutato enormemente.
James Spittal,

1
Un paio di giorni dopo, i problemi di "perdita di memoria" httpdsembrano essere scomparsi completamente.
James Spittal

2

Temo che l'opzione MaxRequestsPerChild ti abbia aiutato nel tuo caso, poiché consente il riciclaggio dei processi dopo un numero definito di richieste, quindi la perdita di memoria è presente, ma non è più visibile.

Inoltre: MaxClients = ServerLimit * ThreadsPerChild

Nel tuo caso, se hai bisogno solo di 7 utenti simultanei (MaxClients = 7) è sufficiente con 2 processi (nel caso in cui uno non riesca a minimizzare i tempi di fermo), quindi la configurazione può essere:

<IfModule prefork.c>
StartServers       2
MinSpareServers    2
MaxSpareServers   20
ServerLimit        2
MaxClients         8
ThreadsPerChild    4
MaxRequestsPerChild  4000
</IfModule>

Uso MaxClients 8 , solo per rendere più equa la distribuzione delle richieste tra 2 processi.

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.