我为Apache进程分配了5GB的内存。
虽然基于每个Apache进程平均消耗42.5MB的事实,我已经在我的服务器上设置了以下内容(同时计算好像每个进程消耗50MB的内存):
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 100 MaxRequestsPerChild 0 </IfModule>
现在提问:
StartServers ? Worker mpm (PHP等),负载平衡是我的高stream量的最佳select? 我已经阅读了这里的答案,并在Google中search了很多这样的问题,但是找不到任何具体的东西。
注意:大多数apache进程与父母/兄弟姐妹共享大部分内存。 你不能轻易总结从apache进程分配内存的值。 你可以做的最好的:你启动了很多的Apache进程,并检查如何改变你分配的内存。
1:StartServers只有有限的重要性。 这意味着,最初将开始多less个subprocess。 Min / MaxSpareServers更为重要。
2:我不明白,你没有说什么你的负载平衡解决scheme。 如果你想能够处理高stream量,你最好的select是使用一个工作者的Apache(或甚至其他types的HTTP服务器)静态文件服务,并基于prefork的(我build议你mpm-itk)的dynamic语言(可能为PHP)。 工作人员应该将dynamic请求转发到基于prefork的服务器。 这种结构也可以很容易地扩展到负载均衡的集群解决scheme。
3:MayRequestPerChild == 0表示进程将不会重新启动。 因此,如果他们有问题,这个问题不是固定的,或者如果他们泄漏,这也不会解决。 如果你的系统是稳定的,你可以在服务器端使用完美的垃圾收集语言(php 不是其中之一!),但是我认为,从实际的angular度来看,最好使用一个大的整数值(在大多数情况下我使用100或500)。 请注意:与处理100-500个请求相比,简单的subprocess重启并不是真正的代价高昂。