Las instancias de Google App Engine siguen apagándose rápidamente

Así que he estado usando el motor de aplicaciones desde hace bastante tiempo sin problemas. Soy consciente de que si un visitante no ha golpeado la aplicación durante un tiempo, la instancia se cerrará y el primer visitante que golpee el sitio tendrá un retraso de unos segundos mientras se activa una nueva instancia.

Sin embargo, recientemente parece que las instancias solo permanecen activas durante un período de tiempo muy corto (a veces menos de un minuto), y si tengo una instancia ya en funcionamiento, y actualizo una página web de la aplicación, todavía se activa otra instancia (y la página que inicia es una página de inicio HTML mínima, no debería requerir mucha CPU / memoria). Mirando mis registros está constantemente iniciando nuevas instancias, lo que nunca fue el caso anteriormente.

¿Algún consejo sobre lo que debería estar viendo, o alguna idea de por qué sucede esto?

Además, estoy usando Python 2.7, threadsafe, python_precompiled, servicios de entrada de calentamiento, NDB.

Actualizar:

Así que cambié mi aplicación para tener al menos 1 instancia inactiva, con la esperanza de que esto solucionara el problema, pero todavía está activando nuevas instancias aunque una instancia residente ya se está ejecutando. Entonces, cuando solo hay 1 instancia residente (y no recibo ningún tráfico excepto yo), y voy a otra página en mi aplicación, todavía se está iniciando una nueva instancia.

Además, cambié la latencia pendiente a 1.5s como señaló koma, pero eso no parece estar ayudando.

El uso de memoria de las instancias es siempre de alrededor de 53 MB, lo cual es sorprendente cuando las páginas a las que se llama no hacen mucho. Estoy usando la clase de instancia de frontend de F1 y eso tiene un límite de 128, pero en cualquier caso 53MB parece alto para lo que debería estar haciendo. ¿Es ese un tamaño aceptable cuando se inicia por primera vez?

Actualización 2: Acabo de notar en el panel de control que en las últimas 14 horas, la solicitud / _ah / warmup respondió con 24 404 errores. ¿Podría esto estar relacionado? ¿Por qué responderían con un estado de respuesta 404?

Pregunta principal: ¿Por qué estaría constantemente iniciando nuevas instancias (incluso sin tráfico)? Especialmente donde ya existen instancias, y ¿por qué se cierran tan rápidamente?

Mi solución a esto fue boost el tiempo de latencia pendiente .

Si una página web dispara 3 solicitudes ajax a la vez, AppEngine lanzaba nuevas instancias para las solicitudes adicionales. Después de configurar el tiempo de latencia pendiente mínimo : configurándolo en 2,5 segundos, la misma instancia procesaba las tres solicitudes y el rendimiento era aceptable.

Mi proyecto aún tiene poca carga / tráfico … así que además de elevar la latencia pendiente, abro una cuenta en Pingdom y la configuro para hacer ping a mi proyecto de Appengine cada minuto.

La combinación de ambos hace que tenga una instancia que permanezca activa y esté atendiendo todas las solicitudes la mayor parte del tiempo. Se escalará a nuevas instancias cuando sea realmente necesario.

1 instancia inactiva significa que el motor de la aplicación siempre activará una instancia adicional para el próximo usuario que viene, por eso está viendo una instancia adicional activada con esa configuración.

Si elimina la configuración de la instancia inactiva (o usa el valor predeterminado) y simplemente aumenta la latencia pendiente, debe “esperar” antes de activar la instancia adicional.

En lo que respecta a la pregunta principal , creo que @koma podría estar en algo al decir que con la configuración predeterminada, el motor de la aplicación tenderá a disparar instancias adicionales, incluso si las solicitudes provienen de la misma sesión.

En mi experiencia, el motor de aplicaciones es excelente en condiciones de tráfico intenso, pero difícil (y a veces frustrante) para trabajar en condiciones de poco tráfico. En particular, es muy difícil entender los matices de cuáles son realmente los criterios para activar nuevas instancias.

Personalmente, tengo un cron-trabajo de “activación” para abrir una instancia cada par de minutos para asegurarme de que si alguien ingresa al sitio, hay una instancia lista para servir. Esto no es ideal porque se comerá en mi presupuesto, pero funciona la mayor parte del tiempo porque el tráfico en mi aplicación es razonablemente alto.

Solo empecé a tener este tipo de problema el lunes 4 de febrero alrededor de las 10 pm EST, y continúa hasta ahora. Primero comencé a notar que las instancias seguían encendiéndose y apagándose, y la latencia aumentaba dramáticamente. Parecía que el progtwigdor de la instancia estaba apagando las instancias inactivas demasiado rápido, y causaba una paliza posterior.

Establecí el mínimo de instancias inactivas en 1 para estabilizar la latencia, lo cual funcionó. Sin embargo, todavía hay palizas de nuevas instancias. Intenté las recomendaciones en este hilo para establecer un mínimo de latencia pendiente, pero eso no ayuda. En última instancia, las instancias inactivas se desactivan demasiado rápido. Luego, cuando son necesarios, la latencia se dispara al intentar iniciar nuevas instancias.

No estoy seguro de por qué viste esto hace un par de semanas, y solo comenzó hace un par de días. ¿Es posible que hayan introducido gradualmente su nuevo progtwigdor de instancias para los clientes? ¿Aún no ves que las instancias se cierran rápidamente?