[pyar] Diagnosticando problemas memoria en server

Sebastian Bassi sbassi en clubdelarazon.org
Lun Jun 28 20:20:32 ART 2010


Hoy estaba probando un programa que tengo corriendo via WSGI (usando
yaro como middleware) y me encontré con un problema de memoria.
El log del apache me decia:

[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72] mod_wsgi
(pid=21825): Exception occurred within WSGI script
'/var/www/s/htdocs/index.wsgi'., referer: http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72] Traceback
(most recent call last):, referer: http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72]   File
"/var/www/s/htdocs/index.wsgi", line 404, in blastresult, referer:
http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72]     p =
subprocess.Popen(cli, stdin=subprocess.PIPE, stdout=subprocess.PIPE),
referer: http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72]   File
"/usr/lib/python2.5/subprocess.py", line 594, in __init__, referer:
http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72]
errread, errwrite), referer: http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72]   File
"/usr/lib/python2.5/subprocess.py", line 1067, in _execute_child,
referer: http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72]
self.pid = os.fork(), referer: http://www.s/blast
[Mon Jun 28 18:09:45 2010] [error] [client 201.213.107.72] OSError:
[Errno 12] Cannot allocate memory, referer: http://www.s/blast

Sé que ese proceso es "pesado", pero en un momento lo corrí sin
problemas y despues de un tiempo me pasó esto, es como si cada vez se
va quedando sin RAM.
Cuando miro el ps veo que las instancias de apache cada una consumia
una cantidad importante de RAM. El free -m me daba 60Mb, asi que
reinicié el apache y tenia casi 200Mb libres (sumando swap):

            total       used       free     shared    buffers     cached
Mem:           360        219        140          0         18         95
-/+ buffers/cache:        105        254
Swap:          255        198         57

El ps me dá esto (parte relevante):

www-data 22082  0.0 13.4 221416 49472 ?        S    19:06   0:00
/usr/sbin/apache2 -k st
www-data 22083  0.0 13.4 221416 49472 ?        S    19:06   0:00
/usr/sbin/apache2 -k st
www-data 22084  0.0 13.4 221416 49472 ?        S    19:06   0:00
/usr/sbin/apache2 -k st
www-data 22085  0.0 13.4 221416 49472 ?        S    19:06   0:00
/usr/sbin/apache2 -k st
www-data 22086  0.0 13.4 221416 49472 ?        S    19:06   0:00
/usr/sbin/apache2 -k st

Despues de usar un par de veces la aplicación, tengo esto:

www-data 22110  0.1 15.9 228908 58656 ?        S    19:11   0:00
/usr/sbin/apache2 -k st
www-data 22111  0.1 15.7 228552 58176 ?        S    19:11   0:00
/usr/sbin/apache2 -k st
www-data 22112  0.1 15.9 228912 58672 ?        S    19:11   0:00
/usr/sbin/apache2 -k st
www-data 22113  0.1 15.7 228552 58172 ?        S    19:11   0:00
/usr/sbin/apache2 -k st
www-data 22114  0.1 15.9 228916 58668 ?        S    19:11   0:00
/usr/sbin/apache2 -k st
www-data 22116  0.4 15.7 228552 58160 ?        S    19:13   0:00
/usr/sbin/apache2 -k st
www-data 22118  0.3 15.7 228552 58164 ?        S    19:13   0:00
/usr/sbin/apache2 -k st
www-data 22119  0.0 13.6 222312 50364 ?        S    19:13   0:00
/usr/sbin/apache2 -k st

Supongo que debo estar haciendo algo mal y no sé que es. Agradeceria
algunas puntas sobre como debuguear problemas de uso de memoria en
Python en servers. Algún módulo o algo desde el Linux directamente o
alguna configuración del Apache que tenga que revisar.



More information about the pyar mailing list