Python 运行多个Django虚拟主机时,WSGIApplicationGroup的哪个值?

Python 运行多个Django虚拟主机时,WSGIApplicationGroup的哪个值?,python,django,apache,mod-wsgi,Python,Django,Apache,Mod Wsgi,我在mod_wsgi下的同一Apache实例上运行多个Django站点。当前,我的apache.conf文件包含以下指令(未指定任何WSGIApplicationGroup): 每当我需要重新加载站点时,我都会触摸/srv/www/mysite/wsgi.py,这会导致所有客户端明显冻结 阅读后,听起来我可以通过在WSGIScriptAlias指令中指定进程/应用程序组来摆脱“重新加载暂停”: WSGIDaemonProcess mysite \ display-name=mysit

我在mod_wsgi下的同一Apache实例上运行多个Django站点。当前,我的apache.conf文件包含以下指令(未指定任何
WSGIApplicationGroup
):

每当我需要重新加载站点时,我都会触摸/srv/www/mysite/wsgi.py,这会导致所有客户端明显冻结

阅读后,听起来我可以通过在
WSGIScriptAlias
指令中指定进程/应用程序组来摆脱“重新加载暂停”:

WSGIDaemonProcess mysite   \
    display-name=mysite    \
    threads=50             \
    maximum-requests=10000 \
    umask=0002             \
    home=/srv/www/mysite   \
    python-path=/srv/www:/srv/src:/srv/venv/prod/lib/python2.7/site-packages \
    python-eggs=/srv/.python-eggs

WSGIScriptAlias / /srv/www/mysite/wsgi.py    \
    process-group=mysite                     \
    application-group=mysite
IIUC,我需要同时提供
进程组=
应用程序组=
,以便进行预加载

到目前为止,我找到的所有文档都使用
应用程序组=%{GLOBAL}
,但这对于我的用例来说似乎是错误的,在我的用例中,每个虚拟主机都应该基于单个站点的
设置.py
文件运行代码(正确吗?)

我是否应该使用预定义的
%{RESOURCE}
变量而不是
mysite


我可以在同一站点的http和https版本之间共享同一应用程序组吗?(我知道我不能对进程组这样做)。

每个虚拟主机Django站点都应该使用一个单独的守护进程进程组,因此%{GLOBAL}的应用程序组是可以的,因为它强制在各自的进程组中使用主解释器上下文。它不在进程组之间共享

请注意,如果在站点负载较重的情况下重新启动,则预加载不一定会有太大帮助,因为仍然需要等待进程启动并加载应用程序

线程数=50看起来太多了。你得到了什么,你的平均响应时间是多少。每个进程使用3-5个线程并使用多个进程可以实现最佳性能。使用多个进程显然意味着使用更多内存,因为应用程序将有多个副本


最后,是的,建议将站点的HTTP和HTTPS版本委派给同一个守护进程进程组,除非您另有充分理由。在第一个VirtualHost中指定WSGIDaemonProcess,如Apache所示。在80/443对中的第二个中,没有WSGIDaemonProcess,并在其他VirtualHost上下文中引用命名的进程组。如果服务器名相同,则允许进行此操作。

谢谢您提供的信息。对于完全生成的页面,我们的响应时间通常在300-600毫秒范围内。我们可以处理30 req/sec的持续负载,其突发时间是前者的两倍,只要持续时间不超过几秒钟。我们之所以使用单进程,是因为在尝试运行@4core/5GB时出现了内存问题。上周我把它翻了一番,所以也许是时候再看看这些参数了。web应用程序进程的实际内存大小是多少?确保您使用的是Apache2.4和mod_wsgi的最新版本。较旧的Apache 2.2在某些情况下存在内存使用问题,Apache 2.4解决了这些问题,但最新的mod_wsgi版本也进行了更改,以避免Apache 2.2和2.4中可能导致额外内存使用的问题。简而言之,不要使用Linux发行版附带的过时版本的Apache和mod_wsgi。web进程(n=17)的平均rss=97000(最大239000)和平均vsz=833000(最大113000)。我们使用的是默认的Ubuntu 12.04,但我正在考虑升级。我们的ISP在launchpad()上提出了一个问题,尽管这似乎集中在安全方面而不是性能上……n=17来自哪里?您的意思是说您有17个单独的Django实例,每个实例都在自己的mod_wsgi守护进程组中?您的配置仅显示单个mod_wsgi守护进程的默认值。或者您正在查看Apache子工作进程和mod_wsgi守护进程?FWIW,12.04版本的mod_wsgi在处理大文件上传和缓慢的HTTP客户端时会显示出内存使用过多。为什么使用最新版本很重要。Linux发行版不支持这种修复。至少我们的一个VirtualHost正在处理从手机上传照片的问题,所以我猜我们正在解决这个问题。我们在这台服务器上运行了17个不同的站点/虚拟主机,它们使用mod_wsgi(还有一些不使用mod_wsgi)。我对与
WSGIDaemonProcess
指令中设置的
display name
匹配的行的
ps gaux
输出进行计数/制表。我们将在周末后升级mod_wsgi(5月1日是劳动节,公众假期,所有人都休息)。
WSGIDaemonProcess mysite   \
    display-name=mysite    \
    threads=50             \
    maximum-requests=10000 \
    umask=0002             \
    home=/srv/www/mysite   \
    python-path=/srv/www:/srv/src:/srv/venv/prod/lib/python2.7/site-packages \
    python-eggs=/srv/.python-eggs

WSGIScriptAlias / /srv/www/mysite/wsgi.py    \
    process-group=mysite                     \
    application-group=mysite