2012-01-22 29 views
3

私は、Djangoを搭載したアプリケーション用の統合サーバーをまとめました。機能のいくつかは実験的なものであり、過度に長い要求が発生します。gunicorn + nginxで長時間実行されているリクエスト

私はパフォーマンスが悪いので大丈夫ですが、今のところ統合する必要があります。長い要求につながる機能を使用するたびに、アプリケーションは(期待通りに)ハングアップし、おそらく1分半後に '502 - Bad Gateway'が返されます。アプリケーションの残りの部分は正常に動作します。

私はgunicornログをチェックして、この問題が発生した時はいつでも私は、しかし、これは私は念のため10分に設定した実際の労働者のタイムアウト、ずっと前に起こる

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 

のような行を取得します。ここでは、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 

私はgunicornバージョン0.13.4を実行しています。どんな助けでも大歓迎です。

この質問はcross-post from ServerFaultです。

答えて

3

ガンコンに直接接続していますか?または、その間にngnixなどがありますか?私が正しく思い出すと、nginxに90秒のタイムアウトがあります。余談として

、そのような悪い実行要求に対して、そこに一般に二つのソリューションです:

  • キャッシュ結果と計算を行い、埋めカスタムDjangoの管理コマンドを呼び出すためにcronジョブを取得キャッシュ。

  • セロリのような非同期タスクキューが実際の計算を行い、準備ができているかどうかを確認するために別の要求を行います。

+0

タイトルが示すように、私はnginxを使用しています。私はテストのためにタイムアウトを10分に設定しましたが、それより早くタイムアウトします(ただし、90秒以上)。 –

+0

それを無視してください。おそらく90秒を超えていないかもしれません。その番号を入手した場所の参照はありますか? –

+0

...また、私は一般的なケースで長時間実行されるリクエストに対処する方法を理解しています。これは、パフォーマンスの低下を伴い、より良いハードウェア上で統合サーバーに展開できるようにするために必要な開発中の機能であり、開発がさらに進んだら、要求は長引かずに実行されます。 –

0

GunicornでAsynchronous workersを試しましたか?

特に遅い要求などには良い。

+0

いいえ、でも私は確信しています問題は誤った設定でした。それ以来、私たちはパフォーマンスの問題に取り組んできたので、これを完全に解決する必要はありませんでした。現在非同期のGunicornワーカーを使用することができない理由はいくつかありますが、将来的にはオプションになる可能性があります。 –

関連する問題