mysql - Apache 进程在没有记录到 access.log 的情况下生成

标签 mysql linux apache memory process

问题:生成 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 产生这么多的原因可能是什么?我在这里遗漏了什么吗?

最佳答案

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

httpd 进程与 MySQL 进程无关。

httpd 进程会在某个点产生,但主要是为了服务最终用户请求 - 更多的最终用户请求 = 更多的 httpd 产生,直到配置中设置的限制,这似乎是 256(例如)。这意味着它将生育 256 个 child 。

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

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

关于mysql - Apache 进程在没有记录到 access.log 的情况下生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439767/

相关文章:

c++ - 在 Linux 上从源代码简单安装

Apache/mod_wsgi 进程意外终止

apache - 使用.htaccess禁用目录的所有CGI(php,perl等)

mysql - 从表中选择直到找到给定值

mysql - 一起使用 MySQL 和 Mongodb

linux - bash:一个接一个地处理文件

Linux控制台脚本根据前缀获取文件大小和修改日期?

java - apache 守护程序 procrun- java 应用程序作为 windows 服务- 无法在 64 位 windows 7 中启动

php - 存储过程 phpmyadmin

MySQL ORDER BY > 如果值相等则交换结果