Pregunta

Quiero saber el uso de la memoria de mi Python aplicación y, específicamente, quiere saber lo que los bloques de código/partes u objetos que están consumiendo más memoria.De búsqueda de Google muestra con fines comerciales es Python Memoria Validador (Sólo en Windows).

Y de código abierto son PySizer y Heapy.

No he probado a nadie, así que quería saber cual es la mejor teniendo en cuenta:

  1. Da más detalles.

  2. Tengo que hacer menos o ningún cambio en mi código.

¿Fue útil?

Solución

Heapy es muy sencillo de usar.En algún momento de su código, usted tiene que escribir lo siguiente:

from guppy import hpy
h = hpy()
print h.heap()

Esto te da una salida como esta:

Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
0  35144  27  2140412  26   2140412  26 str
1  38397  29  1309020  16   3449432  42 tuple
2    530   0   739856   9   4189288  50 dict (no owner)

Usted también puede averiguar desde donde se hace referencia a objetos y obtener estadísticas acerca de eso, pero de alguna manera los documentos en los que están un poco dispersos.

No es un navegador gráfico así, escrito en los conocimientos tradicionales.

Otros consejos

Ya que nadie ha mencionado es que me voy a apuntar a mi módulo memory_profiler que es capaz de imprimir línea-por-línea de informe de uso de memoria y funciona en Unix y Windows (necesidades psutil en esta última).La salida no es muy detallada, pero el objetivo es dar una visión general de donde el código está consumiendo más memoria y no un análisis exhaustivo sobre los objetos asignados.

Después de la decoración de su función con @profile y el funcionamiento de su código con la -m memory_profiler la bandera se imprimirá una línea por línea del informe como este:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a

Recomiendo Zahorí.Es muy fácil de configurar, y que necesita de cero cambios en el código.Usted puede ver los recuentos de objetos de cada tipo a través del tiempo, ver la lista de objetos activos, ver las referencias a los objetos, todo desde la interfaz web sencilla.

# memdebug.py

import cherrypy
import dowser

def start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port
    })
    cherrypy.server.quickstart()
    cherrypy.engine.start(blocking=False)

Importar memdebug, y llame a memdebug.inicio.Eso es todo.

No he probado PySizer o Heapy.Agradecería otros comentarios.

ACTUALIZACIÓN

El código de arriba es para CherryPy 2.X, CherryPy 3.X el server.quickstart el método ha sido eliminado y engine.start no tome la blocking de la bandera.Así que si usted está utilizando CherryPy 3.X

# memdebug.py

import cherrypy
import dowser

def start(port):
    cherrypy.tree.mount(dowser.Root())
    cherrypy.config.update({
        'environment': 'embedded',
        'server.socket_port': port
    })
    cherrypy.engine.start()

Considere la posibilidad de la objgraph biblioteca (ver http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks para un ejemplo de caso de uso).

Muppy es (otro) el Uso de la Memoria del Analizador para Python.El enfoque de este conjunto de herramientas está puesto en la identificación de fugas de memoria.

Muppy intenta ayudar a los desarrolladores a la identidad pérdidas de memoria de aplicaciones Python.Permite el seguimiento de uso de memoria en tiempo de ejecución y la identificación de los objetos que se están escapando.Además, se proporcionan herramientas que permiten localizar la fuente de no se liberan los objetos.

He encontrado meliae a ser mucho más funcional que Heapy o PySizer.Si usted sucede estar ejecutando un wsgi webapp, entonces Dozer es un buen middleware contenedor de Zahorí

Estoy desarrollando una memoria del analizador para Python llamado memprof:

http://jmdana.github.io/memprof/

Esto le permite registrar y graficar el uso de memoria de las variables durante la ejecución de la decoración de sus métodos.Sólo tienes que importar la librería utilizando:

from memprof import memprof

Y decorar su método de uso:

@memprof

Este es un ejemplo de cómo las parcelas aspecto:

enter image description here

El proyecto está alojado en GitHub:

https://github.com/jmdana/memprof

Pruebe también el pytracemalloc proyecto que proporciona el uso de memoria por Python número de línea.

EDITAR (2014/04):Ahora tiene un Qt GUI para analizar las instantáneas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top