womble的回答很棒,尽管有点难以理解和适用于没有经验的人。我想给出一些经验数字,以及“简单内容”与“电子商务”应用程序的比较。
根据mod_wsgi的适当配置来设置不同用例的内容不多,因此我希望可以在此处使用一些散文。
A)CMS网站和微型网站
我们运行着几个客户网站,其中大多数主要是托管django CMS的内容网站或微型网站,一些自定义表单,有时还有Celery用于计划的后台任务。这些站点不需要资源,其中几个可以在具有32 GB RAM的单个4核心Intel Xeon上并行运行。这是我们用于每种此类站点的配置:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
我说的是一台服务器上大约40个站点,其中大多数站点都处于待机状态。站点有2个进程(默认情况下每个进程有15个线程),尽管站点分配服务器资源的能力受到限制,但它们是富裕的。使用(CMS)应用程序的简单性质可以证明为什么此设置足够充分:完成任何请求都不会花费超过几毫秒的时间。Apache将始终保持放松,CPU负载也将保持放松。
B)电子商务网站
我们所做的更为复杂的站点的特点是,本地操作的计算成本仍然较低,但是外部依赖项(例如提供预订数据的Web服务)的交易时间却很昂贵。具有外部请求的操作占用线程的时间更长,因此您需要更多线程来满足相同数量的用户(与上面的简单CMS站点相比)。更糟糕的是,当外部服务无法立即响应请求时(有时持续几秒钟),线程有时会被阻塞。这可能会导致令人讨厌的副作用,即线程将请求发送到同一服务的队列排队,直到所有可用的mod_wsgi线程用完并阻止等待。
对于这些情况,我们尝试使用6
流程时并没有太大的差异,但最终却12
看到了性能和操作稳定性的无与伦比的提升:
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
通过保持良好的响应速度,站点可以轻松地处理150个和250个并行用户的一些简单负载测试(而使用这些2
过程,站点无法同时满足50个用户的需求)。在该负载下,具有32 GB RAM的2 CPU 6核心Intel Xeon的CPU使用率远低于25%,RAM使用率也几乎恒定地保持在25%以下。请注意,我们在这里仅将一个专用机器用于单个站点,因此我们不会窃取其他站点可能需要的资源。
结论
使用更多的进程是允许Apache使用还是不使用可用系统资源之间的权衡。如果要在“攻击”条件下保持稳定的服务器系统(而不是网站!),请保持较低的数量。如果希望Apache在需要时帮助您使用系统资源(CPU,RAM),请选择一个更大的数字。您可以进行多高的计算,就像上面接受的答案中概述的那样,最终受可用的CPU能力和RAM限制。
(PS:我将我的枕头下的modwsgi项目Wiki 的ConfigurationDirectives部分保留下来,以进行类似Apache的背景阅读。另外,请确保理解并监视Apache服务器的打开连接。)