我的服务器运行的是 Ubuntu 18.04.5 LTS,带有 LAMP 堆栈(PHP 7.4)和使用 Prefork MPM 的 Apache 版本 2.4.29。我的服务器有 16 个 CPU 和 29GB 的 RAM。该服务器托管 258 个网站。
每当我重启服务器时,我都会注意到(使用 top 命令)apache 正在创建大量进程。这完全使服务器超负荷。这仅在我重启服务器或手动停止 apache(service apache2 stop)然后启动 apache(service apache2 start)时才会发生。
通常这是 top 的输出(在正常时段):
手动重启或停止并启动 apache 后,平均负载上升到 126.4 以上!它会慢慢地(大约 10-15 分钟)恢复正常。重启或停止并启动 apache 后的前 5 分钟,负载会稳步上升,直到达到 126-130 左右。
这是我的 MPM 配置(/etc/apache2/mods-enabled/mpm_prefork.conf):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
此外,KeepAlive 为 ON、MaxKeepAliveRequests 为 100 且 KeepAliveTimeout 为 2。
非常奇怪的是,我制作了该服务器的精确副本,并在副本上放置了一些网站(6 个网站),当我重新启动或在此副本服务器上启动和停止 apache 时,不会发生此行为。这是上述服务器的精确副本,它仅托管 6 个网站(流量少得多),而不是 258 个。
该问题是否可能是由于重启期间有太多客户端连接等待 Apache 响应,而当 Apache 服务器最终重新启动时,它会用大量连接淹没 Apache 而导致的?
增加 MPM 配置中的值是否有帮助?我检查过日志,但从未超过 MaxRequestWorkers。