Bagaimana cara mengatasi kesalahan batas waktu pekerja kritis gunicorn?

26

Saya telah menggunakan nginx dan gunicorn untuk meng-host situs web saya di dua server,

Kedua server memiliki versi paket yang sama dan situs web berhasil dihosting,

Tetapi di salah satu server saya, gunicorn selalu mendapat batas waktu dan saya mendapatkan kesalahan

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

Dan setelah ini saya mendapatkan 502 kesalahan Badgateway di halaman web. Saya harus memulai kembali proses gunicorn untuk membuka situs web.

Berikut ini adalah log kesalahan:

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

Dan saya mendapatkan kesalahan berkelanjutan seperti ini,

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

Dan pekerja mulai lagi,

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

Sekali lagi Mengabaikan kesalahan EPIPE dan ini berlanjut sampai saya me-restart gunicorn. Dan ketika saya mendapatkan kesalahan ini saya mendapatkan 504 gateway error dari nginx

sm
sumber
1
Bisakah Anda memberikan informasi lebih lanjut? Baris perintah yang Anda gunakan untuk meluncurkan Gunicorn akan menjadi awal yang baik.
supervacuo
Lacak pekerja untuk melihat di mana ia macet:strace -p <PID> -e trace=network -t
Aryeh Leib Taurog
Apa aplikasi yang sedang Anda jalankan? Anda mungkin ingin menambah batas waktu default.
Burhan Khalid
Ya Burhan Khalid, untuk saat ini saya telah meningkatkan proxy_read_timeout menjadi 1200 di nginx dan batas waktu menjadi 3600 dalam konfigurasi gunicorn. Semoga ini bekerja
sm
@sm - apakah itu berhasil?
iamkhush

Jawaban:

29

Untuk memperbaiki ini, tambahkan batas waktu bendera di Nginx,

Dalam peningkatan Nginx proxy_connect_timeoutdan proxy_read_timeout, Anda dapat menambahkan berikut ini di file nginx.conf di bawah httparahan. Mereka default ke 60-an.

proxy_connect_timeout 300s;

proxy_read_timeout 300s;

Mulai ulang server Nginx. Lihat dokumen nginx tentang batas waktu .

Jika perbaikan di atas tidak berhasil, maka tambah bendera batas waktu Gunicorn dalam konfigurasi Gunicorn, batas waktu Gunicorn default adalah 30 detik.

--waktu habis 90

Dokumentasi Gunicorn tentang batas waktu

-t INT, --timeout INT 30 Pekerja yang diam lebih dari beberapa detik ini terbunuh dan dimulai kembali.

Secara umum diatur ke tiga puluh detik. Hanya atur ini secara nyata lebih tinggi jika Anda yakin akan dampaknya bagi pekerja sinkronisasi. Untuk pekerja yang tidak sinkron itu hanya berarti bahwa proses pekerja masih berkomunikasi dan tidak terikat dengan lamanya waktu yang diperlukan untuk menangani satu permintaan.

Gunicorn Documents pada Timeout Pekerja

Semoga ini bisa menyelesaikannya.

sreekanth
sumber
2
Solusi ini menyelamatkan hidup saya setelah saya mencari solusi sepanjang hari. Jika Anda benar-benar memiliki proses yang berjalan lebih dari 30-an (yang merupakan masalah saya), maka ini jelas merupakan solusi yang tepat.
Alex P. Miller
Ya, meskipun kami memiliki skenario yang berjalan lebih dari 30 detik, maka kami mengadopsi solusinya. Bagus itu membantu.
sreekanth
Kami tidak punya skenario seperti itu. Ada lalu lintas minimum di situs, tetapi waktu tunggu pekerja hampir setiap hari hampir bersamaan. Kemudian akan berjalan setelah 1-2 menit. Setup saya adalah nginx - supervisor - gunicorn - Django. Saya memiliki batas waktu 120 detik.
iamkhush
proxy_connect_timeout: "Menentukan batas waktu untuk membuat koneksi dengan server proksi. Perlu dicatat bahwa batas waktu ini biasanya tidak dapat melebihi 75 detik ."
deweydb
@iamkhush, bisakah Anda mencari tahu cara memperbaikinya? Saya juga menghadapi masalah ini bahkan ketika aplikasi saya tidak digunakan. Waktu tunggu pekerja Gunicorn setiap hari dan tidak ada solusi seperti meningkatkan waktu tunggu yang tampaknya berhasil.
Ankit Jaiswal