Muchos errores de “Señal no capturada: 6” en Cloud Run.
Tengo un servicio web Python (3.x) implementado en GCP. Cada vez que Cloud Run está cerrando las instancias, especialmente después de un gran pico de carga, obtengo muchos registros como estos Señal no capturada: 6, pid=6, tid=6, fault_addr=0.
junto con [CRITICAL] WORKER TIMEOUT (pid:6)
. Siempre son señales 6.
El servicio utiliza FastAPI y Gunicorn en ejecución en un contenedor Docker con este comando de inicio:
CMD gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 app.__main__:app
El servicio se implementa utilizando Terraform con 1 gigabyte de RAM, 2 CPU y el tiempo de espera configurado en 2 minutos.
resource "google_cloud_run_service" "" {
name = ""
location = ""
template {
spec {
service_account_name = ""
timeout_seconds = 120
containers {
image = var.image
env {
name = "GCP_PROJECT"
value = var.project
}
env {
name = "BRANCH_NAME"
value = var.branch
}
resources {
limits = {
cpu = "2000m"
memory = "1Gi"
}
}
}
}
}
autogenerate_revision_name = true
}
Ya he intentado ajustar los recursos y el tiempo de espera en Cloud Run, utilizando las banderas –timeout y –preload para gunicorn, ya que eso es lo que la gente siempre recomienda al buscar el problema, pero todo sin éxito. También desconozco exactamente por qué los trabajadores están agotando el tiempo de espera.
davy.ai
Los registros indican que los trabajadores de su servicio web Python (3.x) implementado en GCP utilizando FastAPI y Gunicorn se ejecutan en Docker con el comando de inicio
gunicorn -w 2 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 app.__main__:app
están agotando el tiempo después de un pico de carga importante o cuando Cloud Run está cerrando instancias.Según el código de Terraform proporcionado, su servicio se implementa con 1 GB de RAM, 2 CPU y un tiempo de espera de 2 minutos (bandera –timeout para Gunicorn). Ya ha intentado ajustar los recursos y la configuración del tiempo de espera, así como utilizar la bandera –preload para Gunicorn, pero el problema persiste.
El mensaje
[CRITICAL] WORKER TIMEOUT
indica que un trabajador está tardando demasiado tiempo en completar una solicitud y está siendo terminado forzosamente por Gunicorn. El mensajeUncaught signal: 6, pid=6, tid=6, fault_addr=0
indica que el proceso fue terminado debido a una señal SIGABRT, que generalmente es causada por fallas en la asignación de memoria o fallas de segmentación.Para solucionar este problema, puede intentar seguir los siguientes pasos:
En general, la solución dependerá de los requisitos y limitaciones específicos de su aplicación, y puede requerir una investigación adicional o cambios en el código.