Apache HTTP 消耗太多 CPU


Apache HTTP consuming too much CPU

我在使用 Apache Web Server 加载 CPU 时遇到了一些问题。

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

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

我们将服务器配置为运行基于 Drupal (7.23) 的网站。所以,我们安装了Apache,PHP,MySQL...版本如下:

  • 阿帕奇 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 上,我们有这个配置:

    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 bla@bla.com
        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 - 替代 PHP 缓存 7.x-1.0-beta4
  • 提升 7.x-1.0-beta2
  • 缓存过期 7.x-2.0-beta2
  • 验证码 7.x-1.0
  • 混沌工具套件 (ctools) 7.x-1.3
  • 日期 7.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
  • 嵌入视图显示 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
  • 路径自动 7.x-1.2
  • 病理 7.x-2.11
  • 配置文件2 7.x-1.3+0-dev (2013-MAI-24)
  • select_or_other 7.x-2.19
  • SheetNode 7.x-1.0-beta4+3-dev (2013-MAI-25)
  • SMTP 身份验证支持 7.x-1.0
  • 令牌 7.x-1.5
  • 音译 7.x-3.1
  • 变量 7.x-2.3
  • 视图 7.x-3.7
  • 每个角色的词汇权限 7.x-1.0
  • 网络表单 7.x-3.19
  • 网络表单验证 7.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
  • XML网站地图 7.x-2.0-RC2

我的网站很简单,访问者不多。我说的是每天可能有500名游客。Drupal会导致如此多的CPU负载?还是模块?

我的问题是CPU(所有内核)具有高负载。大多数时候,达到 90% 到 100% 的负载之间!有问题的进程是 apache2。记忆也被无情地消耗掉了。在总共 8GB 中,消耗的内存约为 6.5GB 到 7.5GB。我不知道我的 apache 配置是错误的还是我真的需要更多的硬件(我想不是)。Drupal会导致高CPU负载吗?

当 CPU 负载达到 100% 时,站点会关闭,我们必须重新启动 apache。我使用 APC 和安装 Boost 对 Drupal 做了一个解决方法。有一些效果,但 CPU 负载仍然很高。非常高。

如果您需要更多信息,例如Drupal模块和PHP扩展。请让我知道。

我不是服务器专家,所以我无法指出确切的原因。Drupal 每次调用消耗 ~ 10MB 内存。安装 Devel 模块,并且有一个复选框,该复选框将在调用页面时将页面加载和内存使用行放在页面的每个末尾。

如我所见,您启用了升压模块。这是在根目录或预设文件夹中创建一个/cache/文件夹,用于保存静态文件。这样页面就不会通过SQL和PHP处理。Drupal不应该有任何如此高的负载。

由于这将被清除,我会指出您应该使用服务器设置。你肯定在那里有任何问题。您是如何测量这些高负载的?顶部还是像峰值一样"收集"?运行 $ top 命令,看看这个加载是否是永久性的,加载一个页面,看看它是否射出。$ top 命令还显示最多的资源使用者。

是专用机还是虚拟机?