【问题标题】:Apache process spawn without loging to access.logApache 进程在没有记录到 access.log 的情况下生成
【发布时间】:2015-10-30 15:40:59
【问题描述】:

问题: Apache 进程是在没有将任何活动记录到 access.log 的情况下生成的。

mysld 被杀死,因为服务器内存不足(仅在物理上运行,暂时没有交换)。检查了syslog,搜索了当时的事件。它始于

localhost kernel: [5913722.705565] apache2 invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

然后是一些我认为与此处无关的行,然后是数吨(一秒钟内约 150 行,通常不超过 10 行)

localhost kernel: [5913722.706310] [30772]    33 30772    98583     6989     132        0             0 apache2

最后

Out of memory: Kill process 320 (mysqld) score 228 or sacrifice child
Killed process 320 (mysqld) total-vm:904928kB, anon-rss:113960kB, file-rss:0kB

AFAIK,它们都是apache2 进程,并且它们(主要)是为了处理请求而产生的。如果是这样,则应在access.log 中记录请求。在我的情况下不会发生这种情况。

问题:apache2 产生如此多的原因可能是什么?我在这里遗漏了什么吗?

【问题讨论】:

    标签: mysql linux apache memory process


    【解决方案1】:

    您可能已将 Apache 配置为使用的内存远远超过您的所有内存。这是一个常见的错误。

    httpd 进程与 MySQL 进程无关。

    httpd 进程在一定程度上产生,但主要是为最终用户请求提供服务 - 更多最终用户请求 = 产生更多 httpd,直至配置中设置的限制,例如 256。这意味着它将产生 256 个孩子。

    我假设您使用的是 Prefork Apache 和进程内应用程序服务器(例如 PHP 或 mod_perl)。在此模型中,您最终将获得最大 (MaxClients * 每个进程的应用程序的最大内存使用量) 内存使用量。如果您几乎没有那么多,是时候减少一个、另一个或两者。

    在一般情况下,这意味着将 MaxClients 降低到您的服务器有足够的内存来应对的程度。

    【讨论】:

    • httpd 进程由 apache 处理。更多请求 = 更多进程 = 使用更多内存 = 更少可用内存 = mysql 死机的可能性。
    • 查看问题。为什么 apache 凭空产生了这么多(至少到目前为止......)?
    猜你喜欢
    • 2019-07-11
    • 2015-11-12
    • 2013-04-05
    • 2011-06-15
    • 2015-12-25
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多