我的网站在白天的 2 小时内流量很大(每分钟 2000 次点击)。一天中其余时间的流量较少(每分钟 500 次点击)。我一直在尝试 MaxClients 和 MaxSpareServers 值,但在高峰时段仍然会出现一些停机时间。

如何根据我拥有的 RAM 数量计算出我的配置的最佳值?

每个进程占用 36-40 M 内存

             total       used       free     shared    buffers     cached
Mem:          3096        793       2302          0          0          0
-/+ buffers/cache:        793       2302
Swap:  

      0          0          0

我现在使用的价值观

<IfModule prefork.c>
StartServers 10
MinSpareServers 22
MaxSpareServers 60
ServerLimit 90
MaxClients 90
MaxRequestsPerChild  400

更新:我从我的托管服务提供商处发现了这一点。

http://kb.mediatemple.net/questions/246/(dv)+HOWTO:+Basic+Apache+performance+tuning+(httpd)

我有极端包,我在 MaxClients 中使用了 190 而不是 200,我尝试了半个晚上,我收到了一些 malloc 错误命令行消息,但使用 free 命令在 free 列中得到了 800 M。

答案1

如果您的服务器遭遇峰值,也可能是因为 apache 处理进程和线程创建非常慢(在 mpm_prefork 模式下,每秒 1 个新子进程)。如果您知道您的“高流量”需求(假设是 200 个进程),那么告诉 apache 获取总是这 200 个流程已准备就绪,即使它们 90% 的时间什么都不做。当有人进来时,您就准备好了。

查看这个方便的演示文稿(虽然老旧但很酷) http://www.techpresentations.org/Hacking_Apache_HTTP_Server_at_Yahoo

不需要 StartServers、MaxSpareServers、MinSpareServers - 只需 MaxClients(恒定池大小)

答案2

答案很大程度上取决于您提供的内容类型。是动态内容还是静态内容?是广泛的内容还是单个文档?

您可以使用memcached将文档存储在内存中,这将允许它显着扩展(消除磁盘瓶颈),但这一切都取决于你有多少内存以及内容是否发生很大变化。

答案3

需要根据您的服务器硬件(尤其是内存)和您正在运行的网站的效率进行测试。停机时发生了什么?您是否达到了您设定的这些限制?您的内存是否用完了?

答案4

如果您处于内存严格受限的情况(VPS),那么您可能需要降低默认的最大客户端数量以防止交换死亡。

如果你不是,不要碰它

调整 apache 子进程就像自定义编译内核一样,人们这样做弊大于利,即使这样做的弊端只是浪费了一个下午而没有任何好处。事实证明,apache 的 httpd 项目人员非常擅长他们所做的事情!我的意思是,谁会想到呢?

相关内容