尽管maxclients和serverlimits设置为3000

问题描述:

不能启动超过1000个apache进程,但我们有一个非常强大的服务器(32核cpu,96GB RAM),并且Apache以prefork模式运行。我们apache2.conf文件包括这样的设置:尽管maxclients和serverlimits设置为3000

<IfModule mpm_prefork_module> 
    StartServers   2 
    MinSpareServers  5 
    MaxSpareServers  20 
    ServerLimit  3000 
    MaxClients   3000 
    MaxRequestsPerChild 1000 
</IfModule> 

的问题是,当我们的网站是在重负载下(当Apache进程数达到1000准确地说)(或设置StartServers的时候1000以后),冻结的Apache2和需要重新启动。然而,仍然有很多内存,cpu使用不足,而且apache进程数量远远超出maxclients。

我的问题是,我该怎么做才能让apache到达conf文件中配置的maxclients?

请考虑我们已经与在/etc/security/limits.conf发挥到最大设置打开的文件和nprocs到5000(-a的ulimit显示这些值以及考虑)。

没有错误在/var/log/apache2/error.log

Apache服务器显示可能有在硬限制编译。要改变它,你需要重新编译你的网络服务器。默认值是200000,应该足够高 - 但是你的linux发行版中的软件包可能会有所不同。

我宁愿推荐从您的网络服务器获取静态文件服务。把一个nginx或lighttp服务器放在你的apache前面。让它提供静态内容(图像,CSS,JavaScript等)并将动态请求转发给您的apache。

+0

感谢您的回答,顺便说一句,您知道在编译时更改变量的名称吗?为了避免这个问题,我切换到mod worker + fpm + fast cgi,这限制了进程数量和增强的速度,减少了cpu和ram。 – christophe