La memoria de instancias de App Engine aumenta constantemente

Espero que el uso de memoria de mis instancias del motor de la aplicación (Python) sea relativamente plano después de un período de inicio inicial. Cada solicitud a mi aplicación es de corta duración, y parece que todo el uso de la memoria de una sola solicitud debería publicarse poco después.

Sin embargo, este no es el caso en la práctica. A continuación se muestra una instantánea del uso de la memoria de instancia proporcionada por la consola. Mi aplicación tiene un tráfico relativamente bajo, por lo que generalmente solo tengo una instancia en ejecución. Durante el período de dos días en el gráfico, la tendencia de uso de la memoria aumenta constantemente. (Los dos blips son donde se ejecutaron brevemente dos instancias).

Con frecuencia, la memoria supera los errores, por lo que me gustaría evitar este aumento continuo del uso de la memoria.

En el momento de la instantánea:

  • Memcache está utilizando menos de 1 MB
  • Las colas de tareas están vacías
  • El tráfico es bajo (0.2 cuentas / segundo)

Espero que el uso de la memoria de instancia caiga en estas circunstancias, pero no está sucediendo.

    Debido a que estoy usando Python con su recolección automática de basura, no veo cómo podría haber causado esto.

    ¿Es este comportamiento esperado del motor de aplicaciones y hay algo que pueda hacer para solucionarlo?

    introduzca la descripción de la imagen aquí

    Encontré otra respuesta que explica parte de lo que está pasando aquí. Daré un resumen basado en esa respuesta:

    1. Cuando se usa NDB, las entidades se almacenan en un caché de contexto, y el caché de contexto es parte de su uso de memoria.

    2. De la documentación , uno esperaría que la memoria se liberara al completar una solicitud HTTP.

    3. En la práctica, la memoria no se libera al completar la solicitud HTTP. Aparentemente, los cachés de contexto se reutilizan y el caché se borra antes de su siguiente uso, lo que puede llevar mucho tiempo.

    Para mi situación, estoy agregando _use_cache=False a la mayoría de las entidades para evitar que se almacenen en el caché de contexto. Debido a la forma en que funciona mi aplicación, no necesito los cachés de contexto para estas entidades, y esto reduce el uso de memoria.

    ¡Lo anterior es solo una solución parcial!

    Incluso con el almacenamiento en caché desactivado para la mayoría de mis entidades, ¡el uso de mi memoria sigue aumentando constantemente! A continuación se muestra una instantánea durante un período de 2,5 días, donde la memoria aumenta continuamente de 36 MB a 81 MB. Esto es durante el fin de semana del 4 de julio con poco tráfico.

    introduzca la descripción de la imagen aquí