[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