【问题标题】:Django manage.py spawning several fcgi processesDjango manage.py 产生几个 fcgi 进程
【发布时间】:2010-12-03 20:44:30
【问题描述】:

知道下面两个命令有什么区别吗?

命令: manage.py runfcgi method=threaded host=127.0.0.1 port=3033

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   14558  0.0  2.2  65948  8212 ?        Sl   Oct19   0:09 python /var/www/django_projects/myproject/manage.py runfcgi method=threaded host=127.0.0.1 port=3033

命令: python manage.py runfcgi host=127.0.0.1 port=7021 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   21082  0.0  2.8  15440 10472 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21083  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21084  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21085  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21086  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21087  0.0  2.7  15440 10084 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid

第二个命令看起来生成了 6 个进程,每个进程都分配了内存。

  • 如果您没有大量内存,最好的选择是什么?并运行几个 django 实例?
  • 为什么第二个命令会产生 6 个进程?
  • 每种方法的优点/缺点是什么?
  • 如何限制生成的进程数量?

【问题讨论】:

    标签: django spawn-fcgi


    【解决方案1】:

    您看到多个进程的原因是runfcgi 默认使用method=prefork。使用这种方法,会分叉一堆 FCGI 进程来处理请求;显然method=threaded 使用了多线程 FCGI 进程。

    各有优缺点。 prefork 方法将使用更多内存,因为进程使用的内存比线程多。启动也需要更多时间,因为分叉比创建新线程需要更多时间。但是,通常预分叉处理的负载比线程处理好,因此如果您的应用具有高负载,预分叉的性能可能会更好(如果没有,您可能不会注意到两种方式有太大的区别)。

    为什么第二个命令会产生 6 个进程?如何限制产生的进程数量?

    如果你没有指定要生成多少,Django 会在预分叉时生成默认数量的进程。您可以使用maxsparemaxchildren 选项更改此设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多