AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 541604
Accepted
humungs
humungs
Asked: 2013-09-26 08:30:45 +0800 CST2013-09-26 08:30:45 +0800 CST 2013-09-26 08:30:45 +0800 CST

Apache消耗过多的CPU和内存

  • 772

我在使用 Apache Web 服务器时遇到了一些 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):

  • 核心模块(静态)
  • log_config_module(静态)
  • logio_module(静态)
  • mpm_prefork_module(静态)
  • http_module(静态)
  • so_module(静态)
  • 动作模块(共享)
  • 别名模块(共享)
  • authz_host_module(共享)
  • deflate_module(共享)
  • dir_module(共享)
  • env_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 [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 - 替代 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
  • Pathauto 7.x-1.2
  • 病理 7.x-2.11
  • profile2 7.x-1.3+0-dev (2013-mai-24)
  • 选择或其他 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
  • 工作台_访问 7.x-1.2
  • 工作台媒体 7.x-1.1
  • 工作台配置文件 7.x-1.1
  • xmlsitemap 7.x-2.0-rc2

我的网站很简单,访问者不多。我说的是每天可能有 500 名访客。Drupal 可以使用这么多 CPU 吗?或者它是一个模块?

另一个问题是内存使用。创建进程时,为apache2分配80M。我想太多了。

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

当 CPU 使用率达到 100% 时,站点出现故障,我们必须重新启动 apache。我使用 APC 和安装 Boost 对 Drupal 做了一个解决方案。有一定的效果,但CPU利用率仍然很高。很高。

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

apache-2.2
  • 2 2 个回答
  • 65261 Views

2 个回答

  • Voted
  1. Best Answer
    Xiong Chiamiov
    2013-12-13T16:18:56+08:002013-12-13T16:18:56+08:00

    另一个问题是内存使用。创建进程时,为apache2分配80M。我想太多了。

    那是真实内存还是虚拟内存?老实说,这不是很多。更重要的是,您应该专注于解决导致问题的事情,而不仅仅是您“认为”应该有所不同的事情。

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

    我在管理内存受限的机器时使用的一种方法是将某些任务移出 Apache 并移到其他服务器中,这样我就可以单独调整它们。

    但更简单的方法是改变

    MaxClients           120
    

    对您的工作量更合理的东西:

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

    我稍后再谈,但如果你只处理 33 个并发请求,你就不需要 120 个工人!

    MaxClients           40
    

    您可能应该分别调低到 5MinSpareServers和MaxSpareServer10 之类的值。没有必要让 30 名工人无所事事。

    现在,回到

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

    如果您有 33 个并发请求,但您每分钟只执行 70 个,则有两种可能性:

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

    如果 #1 是这种情况,我真的不知道如何提供帮助 -出乎意料的错误,所以我什至不知道从哪里开始告诉你从哪里开始寻找。

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

    我的问题是 CPU(所有内核)负载很高。大多数时候,负载在 90% 到 100% 之间!有问题的进程是apache2。

    这是一个常数,还是仅在您为请求提供服务时?

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


    对于您所描述的内容,您的服务器功能非常强大。这是个好消息,因为这意味着您应该能够解决此问题。

    • 6
  2. Hari prabaharan
    2017-09-23T01:33:29+08:002017-09-23T01:33:29+08:00

    我遇到了同样的问题。将您的 Web 内容下载到本地计算机并使用更新的防病毒软件扫描内容。就我而言,罪魁祸首是木马病毒。在清除我的网页内容中的病毒后,我的问题得到了解决。

    • 0

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve