我完成了一个带有 4 个应用程序的 Apache 的设置(就叫它们:A、B、C 和 D)。有一天,A 不知何故无法与数据库通信,但 A 没有关闭,因此 A 仍然收到很多请求。因为我们的 Apache 设置为负载平衡器,由于 A 收到越来越多的请求但无法处理任何请求,因此 Apache 向 B、C 和 D 发送一些请求。最后,由于越来越多的请求,Apache 停止运行。
那么,有谁能建议通过改变 Apache 设置来解决这个问题?
谢谢
答案1
解决方案 1:在 A 内保持 mysql 连接的较小超时时间(例如 500 毫秒)。这样请求将更快地终止。
解决方案 2:每当 A 捕获超时异常时,它都应设置一个环境变量,表明 mysql 已关闭,其他请求应失败并正常向用户显示错误消息。您可以每 100 个请求检查 1 个 mysql 连接。因此,只有 1 个请求将等待 mysql 连接,而 99 个请求将立即终止。如果任何请求成功连接到 mysql,它将更新环境标志并让其他请求通过。您还应该针对每个此类异常向自己发送一封邮件,以便更快地恢复。
解决方案 3:尝试找出瓶颈,是否达到了内存限制,Apache 线程数量是否过多?如果您在 Apache 后面运行 php,请注意 Apache 会将 php 加载到每个请求的内存中。因此,每个请求至少需要 25 MB。您可以使用 php-fpm 代替 php,这将使您的服务器当前可以处理的请求数量增加 100 倍,前提是没有其他瓶颈。