2010-12-03 105 views
3

任何想法下面的两个命令之间的区别是什么?Django manage.py产卵几个fcgi进程

命令: manage.py runfcgi方法=螺纹主机= 127.0.0.1端口= 3033

[email protected]:/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 

命令:蟒manage.py runfcgi主机= 127.0.0.1端口= 7021协议= FCGI pidfile进程文件=/TMP/myproject.fcgi.pid

[email protected]:/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个进程?
  • 每种方法的优点/缺点是什么?
  • 你如何限制产生的进程量?

回答

6

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

每个都有优点和缺点。 prefork方法将使用更多的内存,因为进程比线程使用更多的内存。启动起来也需要多一点时间,因为分支比创建新线程需要更多的时间。然而,通常preforking处理的加载要比线程加载的好,所以如果你的应用程序有很高的负载,那么它可能在preforking中表现更好(如果没有,你可能不会注意到任何差别)。

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

如果您没有指定要产生的数量,Django将在预执行时产生默认数量的进程。您可以使用maxsparemaxchildren选项更改此选项。