Ubuntu服务器的Apache 2.2 / MySQL重载

我遇到了一个问题,我似乎无法弄清楚如何解决它; 我有一个常规的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小时内)。

服务器详情:

  • 内存:3GB
  • CPU:1 – 3300MHz
  • 操作系统:Ubuntu 12.04
  • Apache:2.2与PHP 5.3.10和MySQL 5.5.41

我看了几幅图片,在这里你可以看到apache在再次下降之前吞下了很多的CPU:(这只是在networking服务器上的一个用户的小轿车(5到20))

高负荷1高负荷2

我如何避免我的服务器崩溃/重载? (我打开任何解决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设置为上述公式计算出来的。