Apache 用完了所有内存

Apache 用完了所有内存

我的网站(直到昨天都运行良好 - CPU 为 2%,内存为 50%)一直超出资源上限 - CPU 和内存为 100%,并且“负载”和磁盘 IO 都非常高。

该网站是一个在 Ubuntu Linux 上运行的 php(silverstripe)网站,带有 apache 和 mysql。

查看内存:

ps aux  | awk '{print $6/1024 " MB\t\t" $11}'  | sort -n

我获得了 150 个 apache2 条目,全部为 40-90Mb。另外还有 mysql 的 475Mb 和 Java 的 331Mb。

因此,Apache 似乎启动了太多进程并占用了所有资源。对吗?

如果我重新启动 apache,网站将恢复正常运行约一小时,然后在 ps 中积累大量 apache 条目并崩溃。

如何配置 Apache 以免耗尽所有资源并避免网站崩溃?如何找出导致网站资源耗尽的原因?

更新:

#/etc/apache2/mods-enabled# cat mpm_prefork.conf
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers       5
    MaxSpareServers      10
    MaxRequestWorkers     100
    MaxConnectionsPerChild   0
</IfModule>

phpinfo

https://gist.github.com/asecondwill/bd9640cae780fa87a3af05be335aa3fb

答案1

这远远超出了这里回答的范围。但一些建议可能会有所帮助。首先,不要尝试使用 ps 来测量内存使用情况 - 现实是所以更复杂。最好使用'自由的'. 使用 max_clients 限制连接数。

在 Web 服务器上,避免交换真的至关重要。如果您已将其打开,请立即将其关闭。同时将内存过量使用限制为容量 + 15%(并准备重新审视这一点)。

使用 mysql_tuner.pl 检查您的 mysql 配置。确保内存限制在合理的水平。

由于您的主要问题似乎是容量,请确保您正在运行 php-fpm,而不是 mod_php,并考虑将 Apache 替换为 nginx。

相关内容