Author Topic: Diagnosticare e risolvere problemi con la memoria  (Read 660 times)

Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 149
    • View Profile
Diagnosticare e risolvere problemi con la memoria
« on: November 14, 2010, 08:13:26 pm »
A tutte le VPS viene assegnato un certo quantitativo di memoria RAM e di memoria SWAP (memoria virtuale). La memoria SWAP risiede su disco ed è un modo per simulare un quantitativo di memoria centrale maggiore rispetto a quella fisicamente presente.

Quando una VPS termina la memoria fisica, inizia allora ad utilizzare la memoria swap su disco. Se la memoria fisica non è sufficiente a contenere i dati dei processi in esecuzione allora il sistema è costretto ad utilizzare lo SWAP, con il risultato che il sistema deve continuamente leggere e scrivere dal disco, determinando un pesante decadimento delle prestazioni, noto anche come "SWAP Thrashing"

Per individuare e risolvere questo tipo di situazioni, riscontrabili soprattutto in sistema con poca RAM, è possibile utilizzare i metodi indicati in questa guida.

Determinare la memoria libera e l'utilizzo dello SWAP

E' possibile utilizzare il seguente comando per determinare l'utilizzo della memoria sulla tua VPS FlareVM:

Code: [Select]
free -m
E' possibile utilizzare il seguente comando per determinare quali sono i processi che utilizzano più memoria (l'output è ordinato in base alla quatità di memoria utilizzata dai processi):

Code: [Select]
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less
Questo comando permette di monitorare il livello di attività I/O sui dischi della VPS: (per i sistemi Debian o Ubuntu è necessario prima installare il pacchetto sysstat):

Code: [Select]
iostat -d -x 2 5
Solitamente quando una VPS termina la memoria (OOMing - running out of memory),  i maggiori sospettati sono Apache, MySQL, o SpamAssassin.

MySQL in sistemi con poca memoria

Apri il file di configurazione di MySQL (solitamente presente in /etc/mysql/my.cnf) e modificare i vari settaggi come di seguito:

Code: [Select]
key_buffer = 16K
max_allowed_packet = 1M
thread_stack = 64K
table_cache = 4
sort_buffer = 64K
net_buffer_length = 2K

Se l'utilizzo di InnoDB non è necessario allora è possibile disabilitarlo aggiungendo la seguente linea:

skip-innodb

Apache 2 in sistemi con poca memoria

Bisogna innanzitutto individuare il tipo di MPM in uso per determinare la sezione corretta da modificare nel file di configurazione.

Nei sistemi basati su Debian:

Code: [Select]
apache2 -V | grep 'MPM'
Sui sistemi Fedora/CentOS:

Code: [Select]
httpd -V | grep 'MPM'
Nel file di configurazione di Apache 2 (in /etc/apache2/apache2.conf in Debian e Ubuntu, e in /etc/httpd/httpd.conf in CentOS e sistemi simili), cambia i le variabili di configurazione come di seguito:

Code: [Select]
StartServers 1
MinSpareServers 3
MaxSpareServers 6
ServerLimit 24
MaxClients 24
MaxRequestsPerChild 3000

Sarà ora necessario monitorare Apache 2 ed aggiustare questi valori se necessario, ad esempio se il web server non riesce a servire tutte le richieste.

Eliminare Amavisd

Amavisd è un programma molto vorace di memoria. E' possibile disabilitarlo in questo modo:

Code: [Select]
nano /etc/postfix/main.cf
Cerchiamo e commentiamo la seguente riga:

Code: [Select]
content_filter = amavis:[127.0.0.1]:10024
Riavviamo il server email:

Code: [Select]
/etc/init.d/postfix restart
Ora fermiamo spamassassin:

Code: [Select]
/etc/init.d/spamassassin stop
/etc/init.d/amavisd stop

e disabilitiamo il servizio all'avvio del sistema:

Code: [Select]
update-rc.d -f spamassassin remove
« Last Edit: November 14, 2010, 08:17:58 pm by Whitenoise »

ggcambrini

  • Newbie
  • *
  • Posts: 1
    • View Profile
Re: Diagnosticare e risolvere problemi con la memoria
« Reply #1 on: January 02, 2011, 11:02:29 am »
Buongiorno, ho una vps 256 con debian lenny 5 e ho seguito l'utilissima guida per l'ottimizzazione della memoria, ma ho un dubbio su apache; ho impostato i seguenti valori in apache2.conf:

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       3
    MaxSpareServers       6
    MaxClients           24
    MaxRequestsPerChild  3000
</IfModule>

Effettuando un riavvio di apache con il comando /etc/init.d/apache2 restart e andando a vedere i processi attivi vedo più istanze di apache avviate :
%MEM %CPU   RSS    VSZ COMMAND
 9.1  0.1 24060 223168 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --
port=3306 --socket=/var/run/mysqld/mysqld.sock
 6.7  1.2 17672 318332 /usr/sbin/apache2 -k start
 6.7  0.5 17696 318352 /usr/sbin/apache2 -k start
 6.7  0.5 17676 318324 /usr/sbin/apache2 -k start
 4.5  0.2 11956 226236 /usr/sbin/apache2 -k start
 2.9  0.0  7732 226236 /usr/sbin/apache2 -k start
 2.5  0.1  6780  39100 vlogger (access log)
 2.5  0.0  6820 226236 /usr/sbin/apache2 -k start
 2.5  0.0  6812 226236 /usr/sbin/apache2 -k start
 2.3  0.0  6152 226236 /usr/sbin/apache2 -k start
 2.3  0.0  6148 226236 /usr/sbin/apache2 -k start
 2.3  0.0  6148 226236 /usr/sbin/apache2 -k start
 2.3  0.0  6148 226236 /usr/sbin/apache2 -k start
 1.2  0.0  3320 149588 /usr/sbin/apache2 -k start
 1.2  0.0  3288  73480 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
 1.1  0.0  3096  66072 sshd: root@pts/0
 1.1  0.0  3096  66068 sshd: root@notty
 1.1  0.0  3088  65932 sshd: root@pts/3
 0.8  0.0  2308  65932 sshd: root@pts/2
 0.8  0.0  2292  95508 nano /etc/apache2/apache2.conf
 0.7  0.0  1944 103604 -bash
ecc. ecc.

è normale oppure ho sbagliato qualcosa?

Grazie
Davide


Whitenoise

  • Administrator
  • Full Member
  • *****
  • Posts: 149
    • View Profile
Re: Diagnosticare e risolvere problemi con la memoria
« Reply #2 on: January 02, 2011, 01:10:29 pm »
Ciao,

il problema sta nel valore di MaxClients.

La documentazione dice questo:

http://httpd.apache.org/docs/2.0/mod/mpm_common.html#maxclients

Quote
For non-threaded servers (i.e., prefork), MaxClients translates into the maximum number of child processes that will be launched to serve requests. The default value is 256; to increase it, you must also raise ServerLimit.

Prova a dargli un valore molto basso e vedi se cambia qualcosa.

Infine, su una vps da 256MB di RAM potresti valutare di sostituire apache con nginx, che utilizza meno memoria.