determinar el consumo de recursos (micro, memoria) de una aplicacion... (TG)

Jesus Cea jcea en argo.es
Vie Jul 21 03:39:45 CEST 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marcos Sánchez Provencio wrote:
> Lo más sencillo es usar top, no sé si te refieres a algo más complicado...
> 
> Pero me adhiero a la pregunta, ¿hay manera de ver en qué se va la
> memoria en un proceso? Por ejemplo, hice una web que generaba mapas y
> cada vez que generaba uno, se comía 16MB. La solución (mala) fue pasarlo
> a cgi, pero me he quedado con ganas de indagar qué pasaba realmente. Lo
> mejor sería spacemonger
> (http://www.werkema.com/software/spacemonger.html) pero para la ram que
> gastan los objetos de Python.

Depende qué quieras saber exactamente. Por ejemplo, en tu caso imagino
que lo que te interesaba era tener una idea de qué objetos estaban
copando la memoria.

Una forma simple es tener una rutina que la llamas cuando quieras (por
ejemplo, al terminar de procesar la peticion) y te muestra cuántas
instancias de cada clase que hayas definido existen en este momento en
memoria. Eso se hace de forma muy sencilla con un bucle sobre tus
clases, usando "sys.getrefcount()" sobre cada clase.

Ejemplo:

"""
class prueba(object) :
  pass

a=[]
for i in xrange(1000) :
  a.append(prueba())

import sys
sys.getrefcount(prueba)
"""

Una vez qué sabes qué tipo de objetos copan tu memoria, puedes ver quien
los referencia para que sigan existiendo tras terminar de procesar la
petición. Te servirá "gc.get_referrers()"

Ojo con las referencias circulares :-). Aunque las versiones de python
modernas son capaces de liberarlas, solo lo hacen cuando no tienen más
remedio, o haces una llamada explícita a "gc.collect()", que es lento.
Procura evitar referencias circulares, o romper los ciclos
explícitamente cuando no los necesites.

Ojo también con tener pocos objetos propios pero que referencien gran
cantidad de memoria. El ejemplo obvio son las cadenas de texto, grandes
diccionarios, etc.

- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea en argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea en jabber.org         _/_/    _/_/          _/_/_/_/_/
                               _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQCVAwUBRMAwYZlgi5GaxT1NAQIR4QP+JtbgDTRpoG+pd8dCVZlhLMWfqUUlV8K3
PYPKy9Advkgw/VsjTwv5DbV6vk/RYTdrhc1U57PLMur9yOKN5Am1ETc1PeO5lmqq
kvknNfmv60yH6lPKPyTZPuo2qKprYTmh1egaz51hubIQaf+j9p7F6axbeAbtlgSF
L01oEOsDWEo=
=4TJR
-----END PGP SIGNATURE-----
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es