Para reproduzir, inicie o gunicorn assim:
gunicorn -w 1 --max-requests=0 --max-requests-jitter=10 -b 0.0.0.0:8000 api:app
Em seguida, direcione algum tráfego para ele e observe a seguinte saída de registro:
[2019-02-05 20:27:23 +0000] [19] [INFO] Starting gunicorn 19.9.0
[2019-02-05 20:27:23 +0000] [19] [INFO] Listening at: http://0.0.0.0:8000 (19)
[2019-02-05 20:27:23 +0000] [19] [INFO] Using worker: sync
[2019-02-05 20:27:23 +0000] [22] [INFO] Booting worker with pid: 22
[2019-02-05 20:27:37 +0000] [22] [INFO] Autorestarting worker after current request.
[2019-02-05 20:27:37 +0000] [22] [INFO] Worker exiting (pid: 22)
[2019-02-05 20:27:37 +0000] [24] [INFO] Booting worker with pid: 24
Espero que --max-requests-jitter
não tenha efeito quando --max-requests
é definido como 0.
Qual é o comportamento que você está esperando? Normalmente, max-requests=0
deve significar que os workers nunca reiniciam automaticamente, mas pelo seu log parece que sim.
Este erro foi introduzido em d4e1bfe5bd7801c160282310875c70cec15b7c07:
A linha self.max_requests = cfg.max_requests + jitter or MAXSIZE
agora self.max_requests = cfg.max_requests + jitter or sys.maxsize
desde e974f30517261b2bc95cfb2017a8688f367c8bf3 definirá self.max_requests
para o valor _jitter_.
Devemos realmente definir self.max_requests
apenas se o valor de configuração for maior que 0.
@joekohlsdorf o patch acima deve corrigir o erro, mas nos avise ...
Obrigado, parece bom para mim.
Comentários muito úteis
Este erro foi introduzido em d4e1bfe5bd7801c160282310875c70cec15b7c07:
A linha
self.max_requests = cfg.max_requests + jitter or MAXSIZE
agoraself.max_requests = cfg.max_requests + jitter or sys.maxsize
desde e974f30517261b2bc95cfb2017a8688f367c8bf3 definiráself.max_requests
para o valor _jitter_.Devemos realmente definir
self.max_requests
apenas se o valor de configuração for maior que 0.