比方说,我有两个站点(超级用户和服务器错误)从一个盒子上运行自己的Apache虚拟主机。 这两个站点由Django提供支持,并使用mod-wsgi在Apache上运行。 其中一个站点的典型configuration文件如下所示:
WSGIDaemonProcess serverfault.com user=www-data group=www-data processes=5
主机是一台运行Ubuntu的4GB内存的Linux机器。 任何人都可以build议我为2个网站上面指定的进程数量? 假设它们与实际的超级用户和服务器错误站点具有相同的stream量。
那么,实际的Superuser和Serverfault网站有多lessstream量呢? 如果假设没有足够的信息使答案更容易,那么假设就没有多大用处。
最差情况下的进程数应该是您希望网站能够处理的每秒请求数量的高峰数量除以每个请求每秒请求的数量,如果所有这些请求都进行到最慢的操作(如此该行动的处理时间的倒数)。 根据您的req / sec和时间测量的置信区间,添加您认为合适的任何模糊系数。
平均个案数量是相同的,但是您将请求/秒除以每次请求的每秒请求数的加权平均值(权重是您希望执行特定操作的请求的百分比)。 再一次,模糊因素是有用的。
您可以在机器上运行多less个进程的实际上限取决于每个进程需要的最大内存量; 后台处理一个进程,然后运行各种需要大量内存的操作(通常是检索和处理大量数据),使用真实的数据集(如果只使用玩具数据集进行testing,比如说50或100行,那么如果你的一个动作检索和处理表中的每一行,那么当这个表增长到10,000行时,这将不是一个好的测量)来查看内存使用情况。 您可以人为地限制每个进程的内存使用情况,这个脚本可以使达到某个内存使用阈值的工作人员受到影响,如果将该阈值设置得太低,则可能会导致严重的问题。
一旦你有了内存使用的数字,你就会扣除一些内存来为系统开销(我自己喜欢512MB),如果你有其他的进程在同一台机器上运行(比如数据库)还有一些要确保你没有用完磁盘caching空间(取决于你的磁盘工作集大小,但我会再次用不less于512MB)。 这是您按进程内存使用量划分的内存量,以达到最高限度。
如果您需要为峰值负载提供服务的进程数大于您可以装入的进程数,则需要更多的计算机(或者将数据库移至另一台计算机(最简单)。
在这里,你有几年的经验,将网站提炼成一个小而简单的SF文章。
womble的回答很棒,虽然有点难理解,并且申请了没有经验的人。 我想给出一些经验数据,“简单的内容”与“电子商务”应用程序的比较。
在设置mod_wsgi的适当configuration方面设置不同的用例方面没有太多材料,所以我希望在这里使用一些小散文是可以的。
我们运行了几个客户网站,其中大部分主要是内容网站或微型网站托pipedjango CMS,一些自定义的forms,有时为定期的后台任务芹菜。 这些网站并不渴望获得资源,其中有些网站并行运行在带有32 GB RAM的单核四核英特尔至强处理器上。 以下是我们用于这类网站的configuration:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
我在一台服务器上大概谈论了40个站点,其中大部分站点都处于待命状态。 有两个进程(每个有15个线程,默认情况下)站点是富裕的,尽pipe分配服务器资源的能力有限。 为什么这个设置是足够的,可以用(CMS)应用程序的简单性来certificate:没有任何的请求预计会花费几个毫秒的时间来完成。 Apache将永远保持放松,所以将是CPU的负载。
我们所做的更复杂的网站的特点是仍然在计算上廉价的本地操作,但是在交易时间方面昂贵的外部依赖性(例如提供预订数据的networking服务)。 外部请求的操作占用线程的时间要长得多,所以需要更multithreading来满足相同数量的用户(与上面的简单CMS站点相比)。 更糟糕的是,当外部服务无法立即回应请求时,偶尔会有线程被阻塞,有时会持续几秒钟。 这可能会导致不愉快的副作用,线程将请求放在同一个服务队列中,直到所有可用的mod_wsgi线程用完并阻塞等待。
对于这些场景,我们试图使用6进程,而没有看到太大的差别,最后我们看到了性能和运行稳定性无与伦比的提升:
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
有150个和250个并行用户的一些简单的负载testing可以很容易地处理,而且网站可以很好的响应(同时有2进程,这个站点不能用来同时为50个用户提供服务)。 具有32 GB RAM的2 CPU 6核Intel Xeon在该负载下的CPU使用率远低于25%,内存使用率也几乎保持不变,低于25%。 请注意,我们在这里只为一个站点使用专用的机器,所以我们不会窃取其他站点可能需要的资源。
使用更多的进程是允许Apache使用可用的系统资源与否之间的折中。 如果你想保持一个稳定的服务器系统(不是网站!)在“攻击”的条件下保持低的数字。 如果您希望Apache在需要时帮助您使用系统资源(CPU,RAM),请select较高的数字。 有多高可以按照上面所接受的答案所述进行计算,最终受限于可用的CPU功率和RAM。
(PS:我将modwsgi项目维基的ConfigurationDirectives部分保存在我的枕头下,以便进行类似于Apache的背景阅读,同时请确保了解并监视Apache服务器的打开连接 。