我有一个Apache 2.2运行在Ubuntu的11.4与16Gb内存,从移动电话通过GPRS图像托pipe,因为连接速度慢, 我已启用keepalive和设置时间到6,**基于平均加载时间。但通常甚至10 -20个用户apache达到了它的max_clients为300,并阻止进一步的连接。但有趣的事情是甚至** keepaliveclosuresApache达到其最大值,拒绝接受新的连接
** KeepAlive开启/closures也
MaxKeepAliveRequests 100
keepalivetimeout为6(因为很多dynamic图像和慢速连接)
StartServers 100
MinSpareServers 100
MaxSpareServers 150
ServerLimit 300
MaxClients 300
MaxRequestsPerChild 3000 **
我应该怎么做,以提高性能,而不打max_clients.Caching和放气模块也启用。 可以将maxrequestperchild设置为10以防止达到最大客户端。
你用prefork MPM来运行apache 2.2; 这是众所周知的不适合服务大量的并发连接。
考虑切换到工作者MPM,或升级到Apache 2.4。
即使使用worker MPM的apache 2.2也可以为16GB的内存提供数千个并发请求。
特别是在移动设备上,KeepAliveTimeout设置太低会伤害你; 考虑增加到至less30秒。
像adaptr一样,swith到'worker'MPM并扩展到数千个并发连接。
请注意,连接的最大持续时间也由TimeOut Apache参数控制:将其设置为较低值,因为它是“空闲I / O超时”值。 那么,不要低,因为GPRS客户端很慢,但300秒的默认值是高的。
即使将“TimeOut”参数设置为较低值,客户端仍然会决定打开连接的时间。 您可能需要检查mod_reqtimeout( http://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html ),这至less可以阻止slowloris式的攻击。
可以定义其他超时,但是依赖于特定的模块/用法。 我通过mod_proxy和mod_fcgid控制更严格的超时。 如果强制连接的时间不能超过N分钟,那么在达到MaxClients( MaxClients / N new conn / sec)之前,您确切知道您的名义到达率是多less。 这很大程度上取决于您在Apache中运行的内容。