Debian 下调试不稳定的 Apache 服务器

Debian 下调试不稳定的 Apache 服务器

从昨天开始,我在 Debian 机器上运行的 Apache 服务器就变得非常不稳定。我的网站有时可以加载,有时则不能。我认为这与内存有关,因为我的 Apache 日志中全是内存不足(已分配 262144)(尝试分配 4480 字节)。我还附上了内存图的屏幕截图。在此处输入图片描述

重启服务器可以暂时解决问题。我查看了占用内存的进程,但占用内存最大的是 MySQL,占比 6.5%。

在哪里还可以寻找问题?

编辑:我在重启后立即执行了 free -m,大约 2 小时后又执行了一次。我认为趋势很明显:

root@xxx:~# free -m
             total       used       free     shared    buffers     cached
Mem:          4016        731       3284          0         80        200
-/+ buffers/cache:        449       3566
Swap:          459          0        459

root@xxx:~# free -m
             total       used       free     shared    buffers     cached
Mem:          4016       2466       1550          0         92        473
-/+ buffers/cache:       1900       2115
Swap:          459          0        459

答案1

您可能有大量 Apache 进程正在运行。执行以下命令ps ax | grep apache2 | wc -l查看有多少进程。

如果您的KeepAliveTimeout参数太大(如默认值),有人可以连接到您,让连接停留并消耗您的所有资源。

我通常使用KeepAliveTimeout 5,因此当 5 秒内没有返回任何信息时,Apache 可以断开连接。

也检查MaxConnectionsPerChild一下。如果它们是无限的,内存泄漏会耗尽你所有的内存。使用一个合适的值,比如 10000 或 50000。

还要查看已加载的模块。您可能有几个未使用的模块,它们在每个进程实例上都会占用一点内存。虽然数量不多,但很快就会累积起来。

最后,查看一下您的日志。看看日志中是否有任何异常。您可能会发现您的服务器正在遭受攻击,或者有人安装了失败的库,或者诸如此类的事情。

答案2

请检查 MaxRequestsPerChild 参数,如果为 0,请尝试将其更改为更接近 1000 的值(取决于流量)。内存不足信息建议您使用 PHP,检查 php.ini 中的 memory_limit 和 max_execution_time 值,也许您应该增加/减少时间/内存。请提供有关 Apache/PHP 和应用程序配置的更多信息。

答案3

问题的原因在于邮件队列过大。删除队列即可解决问题。

相关内容