[pyar] Caches - Uso y desperdicio de RAM vs. CPU

Alejandro Santos listas en alejolp.com
Mar Mar 24 11:33:12 ART 2015


2015-03-24 15:17 GMT+01:00 Andres Riancho <andres.riancho en gmail.com>:
>
> Al menos en la implementacion que tengo ahora, el cache es basicamente
> un dict, asi que no, no utilizo disco para almacenar los items del
> mismo. Quizás alguna vez las cosas se vayan a disco, pero porque el OS
> lo determine, no porque mi codigo python asi lo indique.
>
> El objetivo de mi mail inicial era el de intentar entender si
> modificar el tamaño de un cache (que se almacena en memoria, quizás
> eso me falto aclarar) en tiempo de ejecucion en base a los recursos
> disponibles tenia sentido o no.
>

Ah, no te había entendido así cuando me lo preguntaste antes.

No tengo idea como se podría encarar, pero se me ocurre un problema
con Python: el uso de RAM de Python no es directamente predecible ni
controlable desde tu aplicación. Agregar elementos a un dict hace que
se use mas memoria, pero eliminar elementos del dict no quiere decir
que se libere la memoria al SO.

Todas las versiones de Python sufren del mismo problema, y es que a
medida que corre el tiempo la memoria interna del proceso se
fragmenta. Si tu aplicación Python utiliza 100 Mb de RAM es posible
que desde el punto de vista del SO estés usando 200 o 500, y limpiar
un dict con {}.clear no necesariamente hace que la memoria usada se le
devuelva al SO, justamente por la forma que funciona el pedido de
memoria de Python. Este problema se hace peor a medida que el proceso
corre durante más tiempo, por ejemplo si tenés un servicio en Python
que corre durante varios días.

Encontré esto[0], y AFAIK la solución que conozco es la de reiniciar
el proceso Python y ya.

Hace unos años Claudio Freire hizo una presentación sobre esto en
PyConAr 08 o 09 (y si está leyendo estos mails seguramente tenga una
mejor respuesta que yo).

[0] http://haypo-notes.readthedocs.org/en/latest/heap_fragmentation.html

-- 
Alejandro Santos


More information about the pyar mailing list