Yêu cầu chạy dài với gunicorn + nginx


8

Tôi đã kết hợp một máy chủ tích hợp cho ứng dụng do Django cung cấp. Một vài trong số các tính năng vẫn đang thử nghiệm và dẫn đến các yêu cầu quá dài.

Bây giờ tôi ổn với hiệu suất kém, nhưng tôi cần có khả năng hòa nhập. Bất cứ khi nào chúng tôi sử dụng tính năng dẫn đến yêu cầu dài, ứng dụng sẽ bị treo (như mong đợi) và sau đó, sau khoảng một phút rưỡi, sẽ trả về '502 - Cổng xấu'. Phần còn lại của ứng dụng hoạt động tốt.

Tôi đã kiểm tra nhật ký gunicorn và bất cứ khi nào điều này xảy ra, tôi nhận được một dòng như

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

tuy nhiên, điều này xảy ra rất lâu trước khi hết thời gian làm việc thực tế, mà tôi đã đặt thành 10 phút chỉ để đảm bảo. Đây là một phần của kịch bản mới nhất chạy 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

Tôi đang chạy phiên bản gunicorn 0.13.4. Mọi sự trợ giúp sẽ rất được trân trọng.

Câu trả lời:


5

502 Bad Gatewaycó nghĩa là nhân viên gunicorn của bạn đã hết thời gian. Bạn có thể thêm --timeouttùy chọn cho gnuicornlệnh. Mặc định là 30 giây.

Như @ greg-k ghi chú, proxy_read_timeouttùy chọn Nginx kiểm soát thời gian chờ khác. Nếu bạn thấy 504 Gateway Timeoutlỗi, bạn có thể điều chỉnh tùy chọn này.


Đã được một thời gian kể từ khi tôi lo lắng về điều này, nhưng - không phải như vậy ở -tlựa chọn mà tôi đã có trong câu hỏi sao?
Matt Luongo

3

Đây có thể là một vấn đề với cấu hình nginx của bạn. Bạn đã định cấu hình giá trị proxy_read_timeout chưa?

Lệnh này đặt thời gian chờ đọc cho phản hồi của máy chủ proxy. Nó xác định nginx sẽ đợi bao lâu để nhận được phản hồi cho yêu cầu. Thời gian chờ được thiết lập không phải cho toàn bộ phản hồi, mà chỉ giữa hai thao tác đọc.

Nguồn: http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout


Tôi mới chuyển đến một máy chủ lớn hơn / nhanh hơn để phát triển ($$ :(), nhưng nếu điều này xuất hiện trở lại, tôi sẽ kiểm tra đề xuất của bạn!
Matt Luongo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.