Tengo una aplicación de servidor python complicada, que se ejecuta constantemente todo el tiempo. A continuación hay una versión muy simplificada de esto.uso de memoria pypy crece para siempre?
Cuando ejecuto la aplicación a continuación usando python; "python Main.py". Usa 8mb de ram directamente, y se mantiene a 8mb de ram, como debería.
Cuando lo ejecuto usando pypy "pypy Main.py". Comienza con el uso de 22 mb de ram y con el tiempo crece el uso de ram. Después de 30 segundos está en 50mb, después de una hora está en 60mb.
Si cambio el "b.something()" para que sea "aprobado", no se engulle la memoria de esa manera.
Estoy usando pypy 1.9 en OSX 10.7.4 Estoy de acuerdo con que pypy use más memoria RAM que python.
¿Hay alguna manera de evitar que pypy consuma memoria durante largos períodos de tiempo?
import sys
import time
import traceback
class Box(object):
def __init__(self):
self.counter = 0
def something(self):
self.counter += 1
if self.counter > 100:
self.counter = 0
try:
print 'starting...'
boxes = []
for i in range(10000):
boxes.append(Box())
print 'running!'
while True:
for b in boxes:
b.something()
time.sleep(0.02)
except KeyboardInterrupt:
print ''
print '####################################'
print 'KeyboardInterrupt Exception'
sys.exit(1)
except Exception as e:
print ''
print '####################################'
print 'Main Level Exception: %s' % e
print traceback.format_exc()
sys.exit(1)
A continuación se muestra una lista de veces y el uso de memoria RAM en ese momento (lo dejé correr durante la noche).
Wed Sep 5 22:57:54 2012, 22mb ram
Wed Sep 5 22:57:54 2012, 23mb ram
Wed Sep 5 22:57:56 2012, 24mb ram
Wed Sep 5 22:57:56 2012, 25mb ram
Wed Sep 5 22:57:58 2012, 26mb ram
Wed Sep 5 22:57:58 2012, 27mb ram
Wed Sep 5 22:57:59 2012, 29mb ram
Wed Sep 5 22:57:59 2012, 30mb ram
Wed Sep 5 22:58:00 2012, 31mb ram
Wed Sep 5 22:58:02 2012, 32mb ram
Wed Sep 5 22:58:03 2012, 33mb ram
Wed Sep 5 22:58:05 2012, 34mb ram
Wed Sep 5 22:58:08 2012, 35mb ram
Wed Sep 5 22:58:10 2012, 36mb ram
Wed Sep 5 22:58:12 2012, 38mb ram
Wed Sep 5 22:58:13 2012, 39mb ram
Wed Sep 5 22:58:16 2012, 40mb ram
Wed Sep 5 22:58:19 2012, 41mb ram
Wed Sep 5 22:58:21 2012, 42mb ram
Wed Sep 5 22:58:23 2012, 43mb ram
Wed Sep 5 22:58:26 2012, 44mb ram
Wed Sep 5 22:58:28 2012, 45mb ram
Wed Sep 5 22:58:31 2012, 46mb ram
Wed Sep 5 22:58:33 2012, 47mb ram
Wed Sep 5 22:58:35 2012, 49mb ram
Wed Sep 5 22:58:35 2012, 50mb ram
Wed Sep 5 22:58:36 2012, 51mb ram
Wed Sep 5 22:58:36 2012, 52mb ram
Wed Sep 5 22:58:37 2012, 54mb ram
Wed Sep 5 22:59:41 2012, 55mb ram
Wed Sep 5 22:59:45 2012, 56mb ram
Wed Sep 5 22:59:45 2012, 57mb ram
Wed Sep 5 23:00:58 2012, 58mb ram
Wed Sep 5 23:02:20 2012, 59mb ram
Wed Sep 5 23:02:20 2012, 60mb ram
Wed Sep 5 23:02:27 2012, 61mb ram
Thu Sep 6 00:18:00 2012, 62mb ram
Hmm. No puedo reproducir esto Con pypy 1.9 (de Macports) y OS X 10.6.8, veo que el uso de la memoria (según lo informado por 'top', desde la columna RSIZE) se mantiene alrededor de los 46M. Puede valer la pena un informe de error. –
Todavía tengo ese proceso ejecutándose, nuevo punto de datos para él: Jue 6 Sep 09:02:26 2012, 63mb RAM – DavidColquhoun
Puedo reproducir esto usando pypy 1.8, pero 1.9 parece haber corregido este problema – goncalopp