Newsgroup: it.comp.os.linux.sys
Titolo: apache succhia ram

Il mio apache 2.2.3-4+etch1 mi succhia un sacco di memoria, vorrei capire se
è sovradimensionato, oppure se dovrò a breve aggiungere della RAM.
Come vedete dal ps qua sotto ho 21 processi da 70Mb, per un totale di 1,4Gb
circa. L'mpm che uso è il prefork (default del pacchetto debian che ho
scaricato) e la configurazione è la seguente:
<IfModule mpm_prefork_module>
    ServerLimit         350
    StartServers         10
    MinSpareServers      10
    MaxSpareServers      20
    MaxClients          300
    MaxRequestsPerChild   0
</IfModule>
Ciò che non capisco è quante connessioni contemporanee sono in grado di
gestire questi 21 processi, a prescindere dal MaxClients (che ho aumentato
da 150 a 300 in quanto un paio di volte mi si è inchiodato tutto proprio
perchè era basso).
dns2:~# ps aux | grep apache
root     13608  0.0  2.4  70868 50684 ?        Ss   May18  
0:11 /usr/sbin/apache2 -k start
www-data 14727  0.0  2.3  72840 48876 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 14728  0.0  2.3  72752 49396 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 14729  0.0  2.3  72660 48684 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 14730  0.0  2.3  72660 48700 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 14731  0.0  2.3  72764 49008 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 14732  0.0  2.3  72672 49056 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 14734  0.0  2.3  72784 49144 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 14735  0.0  2.3  72764 49008 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 14736  0.0  2.3  72756 48960 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 14954  0.0  2.3  72840 49564 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 15548  0.0  2.3  72652 48672 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 23194  0.0  2.3  72916 48936 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 23195  0.0  2.3  72660 48680 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 26600  0.0  2.3  72668 48692 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 26601  0.0  2.3  73032 48804 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 26602  0.0  2.3  72784 49044 ?        S    May18  
0:01 /usr/sbin/apache2 -k start
www-data 26603  0.0  2.3  73032 48868 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 26880  0.0  2.3  72904 48400 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 32218  0.0  2.3  72672 48708 ?        S    May18  
0:00 /usr/sbin/apache2 -k start
www-data 10546  0.0  2.3  72652 48984 ?        S    May18  
0:05 /usr/sbin/apache2 -k start
root     28391  0.0  0.0   3084   676 pts/1    S+   09:22   0:00 grep apache
-- 
g4b0, linux user n. 369000
http://gabo.homelinux.com

 /usr/sbin/apache2 -k start
Non capisco che moduli hai infilato li` dentro per portarlo a 70 MB a 
processo, comunque in realta` sono 50 MB di memoria per processo (la 
colonna RSS), mentre 70 sono quelli richiesti da Apache. I 20 di 
differenza, finche` non ci scrive nessuno, non vengono allocati.
Inoltre devi guardare quanta di quella RAM e` condivisa. Io lo vedo con 
top (colonna SHR). I processi Apache sono di 30 MB allocati, 10 MB 
occupati, di cui circa 4 condivisi.
Questo significa che ogni processo occupa, in realta`, solo 6 MB.
Bye.

 0:11 /usr/sbin/apache2 -k start
# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1155  0.0  2.3  54528  9072 ?        Ss   Apr25   0:36
/usr/sbin/httpd -k start
www      31970  0.0  1.9  54684  7692 ?        S    04:53   0:00 
/usr/sbin/httpd -k start
www      31971  0.0  2.0  54684  7892 ?        S    04:53   0:00 
/usr/sbin/httpd -k start
www      31972  0.0  1.9  54684  7672 ?        S    04:53   0:00 
/usr/sbin/httpd -k start
www      31973  0.0  2.0  54684  7884 ?        S    04:53   0:00 
/usr/sbin/httpd -k start
www      31974  0.0  1.9  54684  7692 ?        S    04:53   0:00 
/usr/sbin/httpd -k start
www      12232  0.0  1.9  54684  7688 ?        S    11:01   0:00 
/usr/sbin/httpd -k start
www      12969  0.0  1.9  54684  7512 ?        S    11:21   0:00 
/usr/sbin/httpd -k start
www      12972  0.0  1.9  54684  7708 ?        S    11:21   0:00 
/usr/sbin/httpd -k start
www      12973  0.0  1.9  54684  7644 ?        S    11:21   0:00 
/usr/sbin/httpd -k start
   PID USER      PR  VIRT SWAP  RES  SHR S %CPU %MEM   TIME COMMAND
  1155 root      18 54528  44m 9072 5140 S  0.0  2.3   9:03 
/usr/sbin/httpd -k start
31971 www       15 54684  45m 7892 3848 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
31973 www       15 54684  45m 7884 3852 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
12972 www       15 54684  45m 7708 3708 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
31970 www       15 54684  45m 7692 3688 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
31974 www       15 54684  45m 7692 3700 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
12232 www       15 54684  45m 7688 3688 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
31972 www       15 54684  45m 7672 3668 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
12973 www       15 54684  45m 7644 3648 S  0.0  2.0   0:00 
/usr/sbin/httpd -k start
12969 www       15 54684  46m 7512 3524 S  0.0  1.9   0:00 
/usr/sbin/httpd -k start
La tua deve essere una configurazione "abbondante" o molto trafficata.
Io ho modificato pesantemente la configurazione per caricare solo i 
moduli che veramente servono e per ottimizzare il funzionamento ma a 
me risultano valori molto più bassi.  La memoria virtuale è di 54M di 
cui 45M in swap (virtuale).  Residenti in memoria sono 7.6M di cui 
3.6M condivisi.  Ogni processo (nessuna attività in corso) usa circa 
4M + 3.6M condivisi (qualcosa di più il padre di tutti i processi).
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 perchè era basso).
Quello e' il numero di connessioni accettate che attendono di essere servite.
La risposta alla tua domanda potrebbe passare per mod_status.
-- 
Per rispondermi, sostituisci a nomecognome il mio nome e cognome
To reply me, substitute nomecognome with my real name and surname
http://bitsandchaos.wordpress.com


Ci do un'occhiata, grazie


 4M + 3.6M condivisi (qualcosa di più il padre di tutti i processi).
Ancora una domanda: da free si evince che ho soltanto più 114Mb di memoria
disponibile. Se io elimino dei moduli di apache, elimino il loro 'consumo'
di ram moltiplicato per il numero di processi, oppure soltanto la loro
dimensione singola in ram? Se vengono caricati in memoria condivisa
dovrebbe essere la prima opzione, no?
dns2:~# free -m
             total       used       free     shared    buffers     cached
Mem:          2026       1912        114          0        235       1349
-/+ buffers/cache:        326       1699
Swap:         2655          0       2655


 Questo significa che ogni processo occupa, in realta`, solo 6 MB.
Stesso discorso di prima, per quanto riguarda free, ad esempio un processo
di apache su top risulta così:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32522 www-data  15   0 72700  48m 5760 S    0  2.4   0:06.01 apache2
In questo caso avrei (circa) 
70Mb*21 ~= 1.4Gb allocati
48Mb*21 ~= 1  Gb occupato
48Mb-5Mb = 43 Mb occupati da ciascun processo 
Domanda: ma se un nuovo processo mo chiede più di 114 Mb va in swap o si
prende la memoria allocata, ma non usata, di apache?
Domanda n2: Mi conviene fare tuning di apache oppure aggiungere ram?


 Swap:         2655          0       2655


> Swap:         2655          0       2655
Con questo "free" non mi preoccuperei molto.
Dei tuoi 2 giga di memoria oltre 1 giga e mezzo sono utilizzati in 
caching e buffering, di fatto il sistema, complessivamente sta 
utilizzando TRECENTOVENTI mega.
Quando inizierai a vedere la swap intaccata e cached a 0 allora inizia a 
preoccuparti :)
Occhio che le ottimizzazioni a priori sono spesso causa di problemi :)
Bye,
  Gabry

 perderne in performace.
Dipende da quanti sono attivi, in media.


 Domanda n2: Mi conviene fare tuning di apache oppure aggiungere ram?
Sicuramente la prima. Controlla quali moduli di apache hai installato e 
configurato.
Bye.

 Giovanni

 configurato.
Eliminando soltanto i moduli perl e pytoon, che non uso in nessun vhost
(spero :) ), ho diminuito drasticamente il consumo di memoria! Ecco cosa
dice ps (sono sempre 21 processi, neho eliminati un po'):
root      1906  0.0  0.4  26944 10352 ?        Ss   10:27  
0:00 /usr/sbin/apache2 -k start
www-data  1911  0.0  0.4  27200  9796 ?        S    10:27  
0:00 /usr/sbin/apache2 -k start
www-data  1912  0.0  0.4  28612  9200 ?        S    10:27  
0:00 /usr/sbin/apache2 -k start
[.. snip ..] 
0:00 /usr/sbin/apache2 -k start
www-data  2276  0.2  0.4  27180 10232 ?        S    10:32  
La cosa strana è che l'uotput di free non è cambiato di molto..
# free -m
             total       used       free     shared    buffers     cached
Mem:          2026       1868        157          0        228       1374
-/+ buffers/cache:        266       1760
Swap:         2655          0       2655


 La cosa strana è che l'uotput di free non è cambiato di molto..
Questo e` normale. I moduli sono comunque binari non modificabili, quindi 
la loro memoria viene condivisa da tutti i fork di apache. In pratica 
risparmi quei 30-40 MB di moduli, ma non moltiplicati per il numero di 
istanze.
Bye.

 istanze.
Ora mi è tutto chiaro. Giusto per approfondire l'argomento, avresti qualche
link dove si tratta dell'argomento memoria linux? Mi interessa in
particolare l'interpretazione dell'output di free ed il funzionamento di
memoria condivisa, cache, swap e compagnia bella..
grazie


 di memoria condivisa, cache, swap e compagnia bella..
Sicuramente ci sono in giro, ma non ti saprei dare un link preciso.
Prova tra gli appunti di informatica libera.
Ultimamente la moda dei blog ha contribuito ancora di piu` alla 
frammentazione della documentazione (e io sto dando il mio bel contributo 
all'entropia universale).
Bye.

Alessandro Pellizzari wrote:

Verissimo! Ma qualcuno li scrive ancora gli howto?
