¿Hay alguna forma para que un programa Python determine cuánta memoria está usando actualmente? He visto discusiones sobre el uso de memoria para un solo objeto, pero lo que necesito es el uso total de memoria para el proceso, de modo que pueda determinar cuándo es necesario comenzar a descartar los datos almacenados en caché.
python
memory-management
rwallace
fuente
fuente
psutil
es multiplataforma y puede devolver los mismos valores que laps
herramienta de línea de comando: pythonhosted.org/psutil/#psutil.Process.memory_infopsutil
) actualmente es compatible con Linux, Windows, OSX, FreeBSD y Sun Solaris, arquitecturas de 32 y 64 bits, con versiones de Python de 2.6 a 3.4" de Documentaciónpsutil
,psutil.Process()
es equivalente apsutil.Process(os.getpid())
. Esa es una cosa menos que debes recordar escribir.Para sistemas basados en Unix (Linux, Mac OS X, Solaris), puede usar la
getrusage()
función desde el módulo de biblioteca estándarresource
. El objeto resultante tiene el atributoru_maxrss
, que proporciona el uso máximo de memoria para el proceso de llamada:Los documentos de Python no toman nota de las unidades. Consulte la
man getrusage.2
página de su sistema específico para verificar el valor de la unidad. En Ubuntu 18.04, la unidad se anota como kilobytes. En Mac OS X, son bytes.La
getrusage()
función también se puede asignarresource.RUSAGE_CHILDREN
para obtener el uso de los procesos secundarios y (en algunos sistemas)resource.RUSAGE_BOTH
para el uso total del proceso (propio y secundario).Si solo le importa Linux, también puede leer el archivo
/proc/self/status
o/proc/self/statm
como se describe en otras respuestas para esta pregunta y también esta .fuente
En Windows, puede usar WMI ( página de inicio , tienda de quesos ):
En Linux (del libro de cocina de python http://code.activestate.com/recipes/286222/ :
fuente
return int(result[0].WorkingSet)
En Unix, puede usar la
ps
herramienta para monitorearlo:donde 1347 es una identificación de proceso. Además, el resultado está en MB.
fuente
Uso actual de la memoria del proceso actual en Linux , para Python 2 , Python 3 y pypy , sin importar nada:
Lee el archivo de estado del proceso actual, toma todo después
VmRSS:
, luego toma todo antes de la primera línea nueva (aislando el valor de VmRSS), y finalmente corta los últimos 3 bytes que son un espacio y la unidad (kB).Para volver, elimina cualquier espacio en blanco y lo devuelve como un número.
Probado en Linux 4.4 y 4.9, pero incluso una versión temprana de Linux debería funcionar: buscando
man proc
y buscando la información en el/proc/$PID/status
archivo, menciona versiones mínimas para algunos campos (como Linux 2.6.10 para "VmPTE"), pero el "VmRSS "field (que uso aquí) no tiene esa mención. Por lo tanto, supongo que ha estado allí desde una versión anterior.fuente
Me gusta que , gracias por @bayer. Obtengo una herramienta de recuento de proceso específica, ahora.
Adjunte mi lista de procesos.
Referencia
fuente
ps aux | awk '/python/{sum+=$6}; END {print sum/1024 " MB"}'
Para Python 3.6 y psutil 5.4.5 es más fácil usar la
memory_percent()
función que se enumera aquí .fuente
Aún más fácil de usar que
/proc/self/status
:/proc/self/statm
. Es solo una lista delimitada por espacios de varias estadísticas . No he podido decir si ambos archivos están siempre presentes.Aquí hay un ejemplo simple:
Eso produce una lista que se parece a esto:
Puede ver que salta unos 300,000 bytes después de aproximadamente 3 asignaciones de 100,000 bytes.
fuente
A continuación se muestra mi decorador de funciones que permite rastrear cuánta memoria consumió este proceso antes de la llamada a la función, cuánta memoria usa después de la llamada a la función y cuánto tiempo se ejecuta la función.
Entonces, cuando tienes alguna función decorada con ella
Podrá ver esta salida:
fuente
fuente
Para los sistemas Unix, el comando
time
(/ usr / bin / time) le brinda esa información si pasa -v. Vea aMaximum resident set size
continuación, que es la memoria máxima (pico) real (no virtual) que se utilizó durante la ejecución del programa :fuente
time
lugar de/usr/bin/time
. Ver: askubuntu.com/questions/434289/…Usando sh y os para entrar en la respuesta de python bayer.
La respuesta está en megabytes.
fuente