Topuzlu at kritik işçi zaman aşımı hatası nasıl çözülür?


26

Web sitemi iki sunucuda barındırmak için nginx ve gunicorn kullandım.

Her iki sunucunun da aynı paket sürümleri var ve web sitesi başarıyla barındırılıyor,

Ama sunucumun birinde gunicorn her zaman zaman aşımına uğradı ve hata alıyorum

[CRITICAL]Worker Timeout
Booting worker with pid
Worker cannot boot with pid

Ve bundan sonra web sayfasında 502 Badgateway hatası alıyorum. Web sitesini açmak için topicorn işlemini yeniden başlatmalıyım.

Hata günlüğü aşağıdadır:

2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)
2014-02-16 14:29:53 [1267] [CRITICAL] WORKER TIMEOUT (pid:4994)   
2014-02-16 14:29:53 [22140] [INFO] Booting worker with pid: 22140

Ve böyle sürekli bir hata alıyorum.

2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:53 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE
2014-02-16 14:29:57 [22140] [DEBUG] Ignoring EPIPE
Ignoring EPIPE

Ve işçi tekrar başlar

2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [1267] [CRITICAL] WORKER TIMEOUT (pid:4993)
2014-02-16 14:32:44 [22276] [INFO] Booting worker with pid: 22276

Yine EPIPE hatası yoksayılıyor ve bu gunicorn'u yeniden başlatana kadar devam ediyor. Ve bu hatayı aldığımda nginx'ten 504 ağ geçidi hatası alıyorum


1
Lütfen daha fazla bilgi verebilir misiniz? Gunicorn'u fırlatmak için kullandığın komut satırı iyi bir başlangıç ​​olurdu.
supervacuo

Nerede takıldığını görmek için işçiyi takip edin:strace -p <PID> -e trace=network -t
Aryeh Leib Taurog

Çalıştırdığınız uygulama nedir? Varsayılan zaman aşımını artırmak isteyebilirsiniz.
Burhan Khalid

Evet Burhan Khalid, şimdilik proxy_read_timeout'u nginx'te 1200'e, gunicorn konfigürasyonunda zaman aşımını 3600'e yükselttim. Umarım bu işe
sm

@sm - işe yaradı mı?
iamkhush

Yanıtlar:


29

Bunu düzeltmek için Nginx’teki zaman aşımı bayrağını artırın,

Nginx artışında proxy_connect_timeoutve direktifin proxy_read_timeoutaltındaki nginx.conf dosyasına aşağıdakileri ekleyebilirsiniz http. 60'lara varsayılanlar.

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Nginx sunucusunu yeniden başlatın. Zaman aşımları hakkında nginx belgelerine bakın .

Yukarıdaki düzeltme işe yaramazsa, Gunicorn yapılandırmasında Gunicorn zaman aşımı bayrağını artırın, varsayılan Gunicorn zaman aşımı 30 saniyedir.

- zaman aşımı 90

Zaman aşımı ile ilgili gunicorn dokümantasyonu

-T INT, - zamanaşımı INT 30 Bu saniyeden fazla sessiz çalışan işçiler öldürülür ve yeniden başlatılır.

Genellikle otuz saniyeye ayarlanır. Bunu yalnızca, senkronize çalışan işçilerin yan etkilerinden eminseniz kesin olarak daha yükseğe ayarlayın. Senkronize olmayan işçiler için bu sadece işçi işleminin hala iletişim kurduğu ve tek bir talebi yerine getirmek için gereken zamana bağlı olmadığı anlamına gelir.

Gunicorn İşçi Zaman Aşımına Göre Belgeler

Umarım bu çözer.


2
Bu çözüm bütün gün bir çözüm aradıktan sonra hayatımı kurtardı. Gerçekten de 30'lu yıllardan daha uzun süren bir işleminiz varsa (bu benim sorunumdu), o zaman bu kesinlikle doğru çözüm.
Alex P. Miller

Evet, 30 saniyeden uzun süren bir senaryomuz olsa da, çözümü benimsedik. Güzel yardımcı oldu.
sreekanth

Böyle bir senaryomuz yok. Sitede bir trafik trafiği var, ancak işçiler her gün neredeyse aynı saatte zaman aşımına uğradı. Sonra 1-2 dakika sonra koşuyor. Kurulumum nginx - yönetici - gunicorn - django. 120 saniyelik zaman aşımına sahibim.
iamkhush

proxy_connect_timeout: "Proxy sunucusuyla bağlantı kurmak için zaman aşımını tanımlar. Bu zaman aşımının genellikle 75 saniyeyi aşamaz .
deweydb

@iamkhush bunun için düzeltmeyi çözebildiniz mi? Ayrıca başvurum boşta olsa bile bu sorunla karşılaşıyorum. Gunicorn çalışanları günlük zaman aşımına uğradı ve zaman aşımını arttırma gibi çözümlerin hiçbiri çalışmıyor gibi görünüyor.
Ankit Jaiswal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.