Thi*_*Lam 26 django mod-wsgi apache-2.2
假设我有 2 个站点(超级用户和 Serverfault)在一个机器上从他们自己的 Apache 虚拟主机运行。这两个站点由 Django 提供支持,并使用 mod-wsgi 在 Apache 上运行。站点之一的典型配置文件如下所示:
WSGIDaemonProcess serverfault.com user=www-data group=www-data processes=5
Run Code Online (Sandbox Code Playgroud)
主机是一台运行 Ubuntu 的具有 4GB RAM 的 linux 机器。任何人都可以建议我应该在上面为我的 2 个站点指定的进程数吗?假设它们与实际的超级用户和 Serverfault 站点具有相同的流量。
wom*_*ble 23
那么,多少流量做实际的超级用户和Serverfault的网站有哪些?如果没有足够的信息使答案更容易,假设就没有多大用处...
您最坏情况下的进程数应该是您希望站点能够处理的每秒峰值请求数,除以一个进程可以处理的每秒请求数,如果所有这些请求都是针对您最慢的操作发出的(所以该操作的处理时间的倒数)。根据您的请求/秒和时间测量的置信区间,添加您认为合适的任何软糖因素。
平均案例计数是相同的,但是您将请求/秒除以每个操作的每秒请求数的加权平均值(权重是您希望命中该特定操作的请求的百分比)。同样,软糖因素是有用的。
您可以在机器上运行多少进程的实际上限取决于每个进程占用的内存量上限;spool up 一个进程,然后使用真实的数据集(如果你只是使用玩具数据集进行测试,比如 50 或 100行,那么如果您的一个操作检索和操作表中的每一行,那么当该表增长到 10,000 行时,这将不是一个很好的度量)来查看内存使用量膨胀到什么程度。您可以使用一个脚本来人为地限制每个进程的内存使用量,该脚本会收集达到某个内存使用量阈值的工人,如果将该阈值设置得太低,则有可能导致令人讨厌的问题。
一旦你得到内存使用数据,你扣除一些系统开销的内存(我自己喜欢 512MB),如果你有其他进程在同一台机器上运行(如数据库),则扣除更多,然后还有一些以确保您不会用完磁盘缓存空间(取决于您的磁盘工作集大小,但我还是会使用不少于 512MB 的空间)。这是您除以每个进程的内存使用量以获得上限的内存量。
如果您需要为峰值负载提供服务的进程数大于您可以安装在盒子上的进程数,则您需要更多的机器(或者在最简单的情况下将数据库移动到另一台机器)。
你在那里,几年的扩展网站的经验被提炼成一个小而简单的 SF 帖子。
womble的回答很棒,虽然有点难以理解和适用于没有经验的人。我想给出一些经验数字,以及“简单内容”与“电子商务”应用程序的比较。
关于设置与 mod_wsgi 的适当配置相关的不同用例的材料并不多,所以我希望在这里使用一些散文是可以的。
我们运行多个客户网站,其中大部分主要是内容站点或托管 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 负载也会如此。
我们所做的更复杂的站点的特点是本地操作的计算成本仍然很低,但外部依赖项(例如提供预订数据的网络服务)在交易时间方面很昂贵。带有外部请求的操作占用线程的时间要长得多,因此您需要更多的线程来满足相同数量的用户的需求(与上面的简单 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 服务器的开放连接。)
| 归档时间: |
|
| 查看次数: |
18234 次 |
| 最近记录: |