我最近将 Web 服务器从 Debian 8 升级到 Debian 11,没有发现与 Apache 相关的错误。升级前,网站运行顺畅。唯一的配置更改是从 php5 切换到 php7.4。
Apache 设置为使用 mpm-prefork,MaxRequestWorkers 最初设置为 150。升级后,最大连接数限制已多次达到。前几次我将 MaxRequestWorkers 提高到 200,然后是 256。然后我分析了服务器硬件(未设置),并将 ServerLimit 设置为 400,MaxRequestWorkers 设置为 300。它仍然达到此限制。当它达到时,我必须重新启动 Apache 服务,systemctl restart apache2。如果我不这样做,它将继续无响应,直到重新启动。
我使用 GoAccess 提取并分析了日志,没有发现任何 DOS 攻击或恶意客户端的证据。感觉好像升级在某个地方导致了问题。正在寻找可能的原因。
编辑:发现第二个可能相关的问题,即可下载的文件不再完成下载。在下载了一定比例的文件(测试中为 2%-40%)后,下载会“卡住”。这使进程处于不确定状态,这很可能是导致最初提到的问题的原因。通过与其他服务器上的原始文件进行 SHASUM 比较,这些文件测试结果良好,并且可以通过控制台在 Web 服务器上直接读取文本文件。
编辑 2:自提出这个问题以来的几个月里,问题一直存在。分析服务器状态和日志输出显示有两个问题。首先是一些 DOS 攻击,这些攻击正在我上面查看和处理。
第二个是上面已经提到的文件下载问题。测试中超过 4MB 的较大文件无法下载,传输在开始几秒钟后就会停止。无论客户端在哪里,在 LAN、通过 VPN 还是通过 Internet,都会发生这种情况。使用 trace8(!) 的调试进行完整日志检查,没有显示有关下载停止的输出。服务器状态显示下载过程的 M 状态为 W,即发送回复。该过程永远不会完成,当创建足够多的进程时,就会达到最大进程数,网站基本上会离线。