Mi programa python tiene un comportamiento de rendimiento curioso: cuanto más tiempo se ejecuta, más lento se vuelve. Al principio, genera decenas de unidades de trabajo por minuto. Después de una hora de duración, toma decenas de minutos por unidad de trabajo. Mi sospecha es que esto es causado por un recolector de basura congestionado.¿Cuánto tiempo está usando el recolector de basura?
El problema es que mi script tiene demasiada memoria para que cProfile funcione en grandes tiradas. (ver: cProfile taking a lot of memory)
Hemos escrito nuestro propio plugin de rendimiento y podemos observar la mayoría de las partes de nuestro sistema y ninguno de ellos parece ser el problema. La única roca que aún no se ha movido es el GC.
¿Hay alguna otra manera (además de profile o cProfile) para ver cuánto tiempo va al GC?
Sí, soy consciente de eso. Esos pueden decirme con cuánto se ocupa el GC, pero mis problemas inmediatos son con los ciclos del procesador, no con la memoria. Si pudiera decirme el * tiempo * que el GC ha usado o incluso * la frecuencia * que se ha ejecutado, podría ser útil. –
@Matthew: ¿le ayudaría a su proceso llamar a 'gc.collect()' en sí mismo, y el tiempo que tarda en regresar? –
@Thomas K, eso me diría cuánto tiempo estuvo tomando una sola colección, pero no con qué frecuencia se está ejecutando el recopilador. Debido a otros datos que tengo, sospecho que el GC se está ejecutando cada vez más a menudo (con cada vez menos efecto) a medida que el sistema se ejecuta. –