1

私はDjangoを使用してかなり長いhttp投稿リクエストを処理していますが、同時に多くのリクエストを受け取ったときに、セットアップにいくつかの制限があるのではないかと思います。

lighttpd.conf fcgi:

fastcgi.server =(
  "a.fcgi" =>(
    "メイン"=>(
      #TCPfastcgiにはソケットの代わりにホスト/ポートを使用します
      "host" => "127.0.0.1"、
      "ポート"=>3033、
      "check-local" => "disable"、
      "allow-x-send-file" => "enable"
  ))
)。

Django init.dスクリプト開始セクション:

start-stop-daemon --start --quiet \
  --pidfile /var/www/tmp/a.pid \
  --chuid www-data --exec / usr / bin / env --python \
  /var/www/a/manage.py runfcgi \
  host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid

上記のスクリプトを使用してDjangoを起動すると、マルチスレッドのDjangoサーバーが作成されます。

www-data 342 7873 0 04:58?00:01:04 python /var/www/a/manage.py runfcgi host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid
www-data 343 7873 0 04:58?00:01:15 python /var/www/a/manage.py runfcgi host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid
www-data 378 7873 0 Feb14?00:04:45 python /var/www/a/manage.py runfcgi host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid
www-data 382 7873 0 Feb12?00:14:53 python /var/www/a/manage.py runfcgi host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid
www-data 386 7873 0 Feb12?00:12:49 python /var/www/a/manage.py runfcgi host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid
www-data 7873 1 0 Feb12?00:00:24 python /var/www/a/manage.py runfcgi host = 127.0.0.1 port = 3033 pidfile = / var / www / tmp / a.pid

lighttpd error.logで、load = 10が表示されます。これは、同時に多くのリクエストを受け取っていることを示しています。これは1日に数回発生します。

2010-02-16 05:17:17:(mod_fastcgi.c.2979)取得したproc:pid:0ソケット:tcp:127.0.0.1:3033ロード:10

私の設定は、多くの長いhttp postリクエスト(それぞれ数分続く可能性があります)を同時に処理するために正しいですか?

4

1 に答える 1

4

マルチプロセスまたはマルチスレッドを実行するようにfastcgiワーカーを構成することをお勧めします。

差出人manage.py runfcgi help

method=IMPL          prefork or threaded (default prefork)
[...]
maxspare=NUMBER      max number of spare processes / threads
minspare=NUMBER      min number of spare processes / threads.
maxchildren=NUMBER   hard limit number of processes / threads

したがって、開始コマンドは次のようになります。

start-stop-daemon --start --quiet \
  --pidfile /var/www/tmp/a.pid \
  --chuid www-data --exec /usr/bin/env -- python \
  /var/www/a/manage.py runfcgi \
  host=127.0.0.1 port=3033 pidfile=/var/www/tmp/a.pid \
  method=prefork maxspare=4 minspare=4 maxchildren=8

必要に応じてプロセスの数を調整する必要があります。FCGIプロセスが多いほど、メモリ使用量は直線的に増加することに注意してください。また、プロセスがCPUにバインドされている場合、使用可能なCPUコアの数よりも多くのプロセスがあると、同時実行にはあまり役立ちません。

于 2010-02-16T19:35:48.470 に答える