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

Andres Riancho andres.riancho en gmail.com
Mie Mar 25 08:07:39 ART 2015


Solo como comentario extra a la conversacion, en algunos entornos
(como AWS) no existe swap del OS; por lo que un cache (en memoria) con
un tamaño de items elevado puede consumir toda la memoria y llegar a
lanzar MemoryError exceptions rapidamente.

2015-03-24 11:33 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
> 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
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar



-- 
Andrés Riancho
Project Leader at w3af - http://w3af.org/
Web Application Attack and Audit Framework
Twitter: @w3af
GPG: 0x93C344F3


More information about the pyar mailing list