1

我正在使用 Django 处理相当长的 http post 请求,我想知道当我同时收到许多请求时我的设置是否有一些限制。

lighttpd.conf fcgi:

fastcgi.server = (
  "a.fcgi" => (
    “主要” => (
      # 使用主机/端口代替套接字进行 TCP fastcgi
      "主机" => "127.0.0.1",
      “端口” => 3033,
      “检查本地” => “禁用”,
      “允许-x-发送文件”=>“启用”
  ))
)

Django init.d 脚本开始部分:

启动-停止-守护进程 --start --quiet \
  --pidfile /var/www/tmp/a.pid \
  --chuid www-data --exec /usr/bin/env --python \
  /var/www/a/manage.py runfcgi \
  主机=127.0.0.1 端口=3033 pidfile=/var/www/tmp/a.pid

使用上面的脚本启动 Django 会产生一个多线程的 Django 服务器:

www-数据 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-数据 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-数据 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-数据 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-数据 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-数据 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,这表明我同时收到了许多请求,这种情况每天会发生几次:

2010-02-16 05:17:17: (mod_fastcgi.c.2979) 得到 proc: pid: 0 socket: tcp:127.0.0.1:3033 load: 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 回答