我的网站(直到昨天都运行良好 - 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。