Permintaan berjalan lama dengan gunicorn + nginx

8

Saya telah mengumpulkan server integrasi untuk aplikasi bertenaga Django kami. Beberapa fitur masih eksperimental, dan menghasilkan permintaan yang terlalu panjang.

Saya baik-baik saja dengan kinerja yang buruk, untuk saat ini, tetapi saya harus dapat berintegrasi. Setiap kali kita menggunakan fitur yang mengarah ke permintaan panjang, aplikasi hang (seperti yang diharapkan) dan kemudian, setelah mungkin satu setengah menit, mengembalikan '502 - Bad Gateway'. Sisa aplikasi berfungsi dengan baik.

Saya memeriksa log gunicorn, dan setiap kali ini terjadi saya mendapatkan garis seperti

2012-01-20 17:30:13 [23128] [DEBUG] GET /results/
2012-01-20 17:30:43 [23125] [ERROR] WORKER TIMEOUT (pid:23128)
Traceback (most recent call last):
  File "/home/demo/python_envs/frontend/lib/python2.6/site-packages/gunicorn/app/base.py", line 111, in run
    os.setpgrp()
OSError: [Errno 1] Operation not permitted

namun, ini terjadi jauh sebelum batas waktu pekerja yang sebenarnya, yang telah saya setel 10 menit hanya untuk memastikan. Inilah bagian dari skrip pemula yang menjalankan gunicorn.

description "..."

start on runlevel [2345]
stop on runlevel [!2345]
#Send KILL after 5 seconds
kill timeout 5
respawn

env VENV="/path/to/a/virtual/env/"

#how to know the pid
pid file $VENV/run/guniconr-8080.pid

script
exec sudo -u demo $VENV/bin/gunicorn_django --preload --daemon -w 4 -t 600 --log-level debug --log-file $VENV/run/gunicorn-8080.log -p $VENV/run/gunicorn-8080.pid -b localhost:8080 /path/to/settings.py
end script

Saya menjalankan versi gunicorn 0.13.4. Bantuan apa pun akan sangat dihargai.

Matt Luongo
sumber

Jawaban:

5

502 Bad Gatewayberarti pekerja tembak Anda habis. Anda dapat menambahkan --timeoutopsi ke gnuicornperintah. Standarnya adalah 30an.

Sebagai @ greg-k mencatat, proxy_read_timeoutopsi Nginx mengontrol waktu habis yang lain. Jika Anda melihat 504 Gateway Timeoutkesalahan, Anda dapat menyesuaikan opsi ini.

Monitor Ikan
sumber
Sudah lama sejak saya khawatir tentang ini, tapi- bukankah itu sama dengan -topsi yang sudah saya miliki dalam pertanyaan?
Matt Luongo
3

Ini mungkin masalah dengan konfigurasi nginx Anda. Apakah Anda mengonfigurasi nilai proxy_read_timeout?

Arahan ini menetapkan batas waktu baca untuk respons server proksi. Ini menentukan berapa lama nginx akan menunggu untuk mendapatkan respons terhadap permintaan. Batas waktu ditetapkan bukan untuk seluruh respons, tetapi hanya antara dua operasi pembacaan.

Sumber: http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout

Greg K.
sumber
Saya baru saja pindah ke server yang lebih besar / lebih cepat untuk pengembangan ($$ :(), tetapi jika ini muncul lagi saya akan menguji saran Anda!
Matt Luongo