问题:生成 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/