我遇到了一个问题,我似乎无法弄清楚如何解决它; 我有一个常规的Ubuntu 12.04服务器与Apache 2.2运行一个网站。 时不时的服务器重载,并开始变得没有反应,简单的命令需要很长时间才能执行,直到服务器重新启动或重新启动apache / mysql。 (而网站本身closures完成)
看错误日志,我看到一个简单的
[error] server reached MaxClients setting, consider raising the MaxClients setting
后面跟着一堆mysqli无法连接
人们会简单地假设我需要增加MaxClients,但是我已经做了几次,我担心我会通过将服务器设置得太高来让服务器过载,下面是如何设置mpm prefork:
<IfModule mpm_prefork_module> StartServers 20 MinSpareServers 10 MaxSpareServers 20 MaxClients 150 MaxRequestsPerChild 90 </IfModule>
在正常的一天,我们有大约1700个用户/访问者 (在24小时内)。
服务器详情:
我看了几幅图片,在这里你可以看到apache在再次下降之前吞下了很多的CPU:(这只是在networking服务器上的一个用户的小轿车(5到20))


我如何避免我的服务器崩溃/重载? (我打开任何解决scheme,即使更改为nginx或其他的东西,如果这可以更好地处理负载)。
另外,我不关心RAM的使用/消耗,因为我可以添加更多的RAM,这是我关心的CPU。
以下是链接到一个伟大的文章,将有助于确定mpm_prefork_module的正确设置。
这个想法是运行一个脚本,告诉你每个Apache进程使用了多less内存,然后使用这些信息来configuration设置。
http://cloudinservice.com/tune-apache-performance-using-mpm-prefork-module/
脚本: http : //cloudinservice.com/wp-content/uploads/2011/03/ap.sh.zip
MaxClients&ServerLimit。
解压缩ap.sh.zip
sh ap.sh
输出将是这样的:
Apache内存使用率(MB):1372.6平均处理大小(MB):54.9041
尝试执行多次来比较数字; 当服务器负载很重时,会显示好的结果。 现在,当您知道Apache使用的平均内存量和服务器的内存总量时,可以计算用于MaxClients设置的值。
例如,如果您的Apache进程平均消耗50MB内存,服务器RAM为2GB,并且您希望其余进程保留512MB,则:MaxClients =(2GB – 512MB)/ 50MB = 30.72〜30。
据我所知,ServerLimit是同样的事情,但是,虽然MaxClient设置可以在不需要重启Apache的情况下进行更改,但要使新的ServerLimit值生效,需要重启Apache。
MaxClients应始终为<= ServerLimit。 为了方便起见,我将ServerLimit = MaxClients设置为上述公式计算出来的。