[gunicorn] Gunicorn 작업자 시간 초과 오류

나는 3 명의 근로자 30 명의 근로자 연결과 eventlet 작업자 클래스를 사용하여 gunicorn을 설정했습니다. Nginx 뒤에 설정되어 있습니다. 몇 번의 요청 후에, 나는 이것을 로그에서 볼 수 있습니다.

[ERROR] gunicorn.error: WORKER TIMEOUT (pid:23475)
None
[INFO] gunicorn.error: Booting worker with pid: 23514

왜 이런 일이 발생합니까? 무엇이 잘못되었는지 어떻게 알 수 있습니까?

감사



답변

Django + nginx + gunicorn을 사용하는 것과 동일한 문제가있었습니다. Gunicorn 문서에서 우리는 거의 차이가없는 정상 시간 초과를 구성했습니다.

몇 가지 테스트 후 솔루션을 찾았습니다. 구성 할 매개 변수는 timeout (그리고 정상 시간이 아님) 시계처럼 작동합니다 ..

따라서 다음을 수행하십시오.

1) gunicorn 구성 파일을 엽니 다

2) TIMEOUT을 필요한 것으로 설정하십시오-값은 초입니다

NUM_WORKERS=3
TIMEOUT=120

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=127.0.0.1:9000 \
--pid=$PIDFILE


답변

Google Cloud --timeout 90에서 시작 지점에 추가app.yaml

entrypoint: gunicorn -b :$PORT main:app --timeout 90


답변

로 Gunicorn을 실행하십시오 --log-level=DEBUG.

앱 스택 추적을 제공해야합니다.


답변

이것이 될 수 있을까?
http://docs.gunicorn.org/en/latest/settings.html#timeout

응답이 너무 오래 걸리거나 대기 중일 수 있습니다.


답변

다른 작업자 유형 클래스를 gevent 또는 tornado 와 같은 비동기식 클래스를 사용해야합니다 . 자세한 설명은 다음을 참조하십시오.

요청을 처리하는 동안 응용 프로그램 코드를 오랫동안 일시 중지해야 할 경우 Eventlet 또는 Gevent를 설치할 수도 있습니다.

두번째 것 :

기본 동기 작업자는 응용 프로그램이 CPU 및 네트워크 대역폭 측면에서 리소스 바인딩 된 것으로 가정합니다. 일반적으로 이는 응용 프로그램이 정의되지 않은 시간이 걸리는 작업을 수행해서는 안됨을 의미합니다. 예를 들어 인터넷 요청이이 기준을 충족합니다. 클라이언트가 서버에 쌓이는 방식으로 외부 네트워크에 장애가 발생합니다.


답변

나는 매우 비슷한 문제가 있었고, “runserver”를 사용하여 아무것도 찾을 수 없는지 확인하려고 시도했다. Killed

따라서 리소스 문제 일 수 있다고 생각하고 인스턴스에 더 많은 RAM을 제공하기 위해 진행했습니다.


답변

WORKER TIMEOUT애플리케이션이 정의 된 시간 내에 요청에 응답 할 수 없음을 의미합니다. gunicorn 시간 제한 설정을 사용하여 이를 설정할 수 있습니다 . 일부 응용 프로그램은 다른 응용 프로그램보다 응답하는 데 더 많은 시간이 필요합니다.

이에 영향을 줄 수있는 또 다른 것은 작업자 유형을 선택하는 것입니다

기본 동기 워커는 애플리케이션이 CPU 및 네트워크 대역폭 측면에서 리소스 바인딩 된 것으로 가정합니다. 일반적으로 이는 응용 프로그램이 정의되지 않은 시간이 걸리는 작업을 수행해서는 안됨을 의미합니다. 정의되지 않은 시간이 걸리는 예는 인터넷에 대한 요청입니다. 클라이언트가 서버에 쌓이는 방식으로 외부 네트워크에 장애가 발생합니다. 따라서 이러한 의미에서 API로 나가는 요청을하는 웹 응용 프로그램은 비동기 작업자의 혜택을받습니다.

Docker Swarm을 사용하여 응용 프로그램을 배포하려고 시도했을 때와 동일한 문제가 발생하면 시간 초과를 늘리고 다른 유형의 작업자 클래스를 사용하려고했습니다. 그러나 모두 실패했습니다.

그리고 갑자기 작성 파일 내부의 서비스에 대해 자원을 너무 낮게 제한한다는 것을 깨달았습니다 . 이것은 내 경우에 응용 프로그램을 느리게 한 것입니다.

deploy:
  replicas: 5
  resources:
    limits:
      cpus: "0.1"
      memory: 50M
  restart_policy:
    condition: on-failure

먼저 응용 프로그램 속도를 늦추는 것이 무엇인지 확인하는 것이 좋습니다.