Apache消耗太多的CPU和内存

我在使用Apache Web Server加载内存时遇到一些麻烦。

我们正在虚拟机上运行Ubuntu Server 12.04 LTS 。 我们的服务器有以下规格:

  • 8GB内存;
  • 4个vCPU( 12ghz );

我们configuration服务器运行一个基于Drupal(7.23)的网站 。 所以,我们安装了Apache,PHP,MySQL …版本如下:

  • Apache 2.2.22;
  • PHP 5.3.10( PHP以Apache模块运行 );
  • APC 3.1.7;
  • MySQL 5.5.31(所有innodb表);

我也运行一些Apache模块 。 看看( apachectl -M ):

  • core_module(静态)
  • log_config_module(静态)
  • logio_module(静态)
  • mpm_prefork_module(静态)
  • http_module(静态)
  • so_module(静态)
  • actions_module(共享)
  • alias_module(共享)
  • authz_host_module(共享)
  • deflate_module(共享)
  • dir_module(共享)
  • env_module(共享)
  • include_module(共享)
  • mime_module(共享)
  • php5_module(共享)
  • proxy_module(共享)
  • proxy_http_module(共享)
  • reqtimeout_module(共享)
  • rewrite_module(共享)
  • setenvif_module(共享)
  • ssl_module(共享)
  • status_module(共享)

apache2.conf上 ,我们有这个configuration:

  Timeout 90 KeepAlive On MaxKeepAliveRequests 80 KeepAliveTimeout 5 HostnameLookups Off LogLevel warn <IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 30 MaxClients 120 MaxRequestsPerChild 1000 </IfModule> 

我的网站的虚拟主机

  <VirtualHost *:80> ServerName blabla.bla.bla ServerAdmin [email protected] DocumentRoot /l/disk0/site/public_html <Directory /> AllowOverride None </Directory> <Directory /l/disk0/site/public_html> Options MultiViews Indexes Includes FollowSymLinks ExecCGI AllowOverride All Order allow,deny allow from all </Directory> LogLevel warn ErrorLog "/l/disk0/site/logs/apache/site/error.log" CustomLog "/l/disk0/site/logs/apache/sit/access.log" combined SSLProxyEngine on RewriteEngine on RewriteLog logs/rewrite_www_log RewriteLogLevel 0 Include rewrites-www.conf </VirtualHost> 

Drupal模块:

  • ACL 7.x-1.0
  • APC – 另类PHPcaching7.x-1.0-beta4
  • 升压7.x-1.0-beta2
  • caching到期7.x-2.0-beta2
  • CAPTCHA 7.x-1.0
  • 混沌工具套件(ctools)7.x-1.3
  • date7.x-2.6
  • 域访问7.x-3.10
  • 域块7.x-2.0
  • 域名CTools 7.x-1.3
  • 域语言环境7.x-1.0-beta3
  • 域分类7.x-3.x-dev(2012-abr-29)
  • 域视图7.x-1.5
  • embedded视图显示7.x-1.2
  • 实体API 7.x-1.2
  • 实体参考7.x-1.0
  • IMCE 7.x-1.7
  • IMCE Mkdir 7.x-1.0
  • 国际化7.x-1.10
  • 链接7.x-1.1
  • 本地化更新7.x-1.0-beta3
  • 媒体7.x-1.3
  • 元标签快速7.x-2.7
  • 时事通讯7.x-1.0-beta9
  • 选项元素7.x-1.9
  • 页面样式7.x-1.0
  • 面板7.x-3.3
  • Pathauto 7.x-1.2
  • 病态7.x-2.11
  • profile2 7.x-1.3 + 0-dev(2013-mai-24)
  • select_or_other 7.x-2.19
  • 表单7.x-1.0-beta4 + 3-dev(2013-mai-25)
  • SMTPauthentication支持7.x-1.0
  • 令牌7.x-1.5
  • 音译7.x-3.1
  • variables7.x-2.3
  • 查看7.x-3.7
  • 每个angular色的词汇权限7.x-1.0
  • Webform 7.x-3.19
  • Webformvalidation7.x-1.2
  • 工作台7.x-1.2
  • workbench_access 7.x-1.2
  • workbench_media 7.x-1.1
  • workbench_profile 7.x-1.1
  • xmlsitemap 7.x-2.0-rc2

我的网站很简单,没有很多访问者。 我每天都在谈论500名游客。 Drupal可以导致这么多的CPU加载? 还是一个模块?

其他问题是内存使用情况。 当一个进程被创build时,80M被分配给apache2。 我觉得太多了。

我的问题是,CPU(所有内核)有一个高负载。 大部分时间,击中90%和100%的负载! 违规的过程是apache2 。 记忆也消耗无遗憾。 总共8GB,消耗的内存大约是6.5GB到7.5GB 。 我不知道如果我的Apacheconfiguration是错误的,或者如果我真的需要更多的硬件(我猜不是)。 Drupal可以导致高CPU负载?

当CPU负载达到100%时,站点closures,我们必须重新启动Apache。 我用Drupal使用APC和安装Boost做了解决方法。 有一些有效的,但CPU负荷仍然很高。 很高。

如果你需要更多的信息,比如Drupal模块和PHP扩展。 请告诉我。

其他问题是内存使用情况。 当一个进程被创build时,80M被分配给apache2。 我觉得太多了。

那是真的还是虚拟的内存? 老实说,这不是很多; 更重要的是,你应该把重点放在解决引起问题的事情上,而不是你认为应该是不同的东西。

如果你希望Apache进程占用较less的内存,你应该禁用模块(因为每一个都需要更多的代码在内存中)。 但是,如果你需要启用所有的模块,那么就是这样。

我在pipe理内存受限的机器时使用的一种方法是将某些任务从Apache移到其他服务器,以便我可以分别调整它们。

但更简单的方法是改变

 MaxClients 120 

为您的工作量更合理:

如果我们考虑重写访问和主站点stream量,我们每分钟有大约70个请求。 现在,我们有33个传入连接。

我会马上回来,但如果你只处理33个并发请求,你不需要120个工人!

 MaxClients 40 

而且,您应该将MinSpareServersMaxSpareServer分别调整为5和10。 没有必要有30名工人坐在一起无所事事。

现在,回到

如果我们考虑重写访问和主站点stream量,我们每分钟有大约70个请求。 现在,我们有33个传入连接。

如果你有33个并发请求,但你每分钟只做70个,有两种可能:

  1. 您的请求每个服务大约需要30秒!
  2. 你的请求率不是很稳定,大部分时间你什么都不做。

如果#1是这样的话,我真的不知道如何去帮助 – 有些事情是非常错误的,所以错误的我甚至不知道该从哪里告诉你开始寻找。

如果它是#2,我猜你是从你的服务器提供所有的静态资产(图像,js,css,字体)。 最好把它们放在CDN上,但是如果你真的做不到,你可以在它们上面设置超长的caching时间,并重新打开Varnish。 如果你正在使用Apache进程和PHP以及其他一些东西来提供静态文件,那么你正在浪费资源 – 用更简单的方法来做到这一点!

我的问题是,CPU(所有内核)有一个高负载。 大部分时间,击中90%和100%的负载! 违规的过程是apache2。

这是一个固定的数字,还是只有当你服务的请求?

磁盘I / O如何查看( iostat -mhx 2 )? MySQL在做什么( show processlist; )?


您的服务器对于您所描述的内容极度不满意。 这是一个好消息,因为这意味着你应该能够解决这个问题。

我面临同样的问题。 将您的网站内容下载到本地计算机,并使用更新的反病毒扫描内容。 在我的情况下,罪魁祸首是木马病毒。 在我的网页内容清理病毒后,我的问题得到解决。