带有 mod_wsgi 的 Apache - 如果所有线程都忙,如何拒绝请求?

带有 mod_wsgi 的 Apache - 如果所有线程都忙,如何拒绝请求?

我们有一台运行 Apache 的服务器,其中一个虚拟主机使用 mod_wsgi 根据请求运行繁重任务。该服务器一次可以处理 X 个请求,每个请求将运行约 10 分钟。如果所有线程都忙,我希望服务器立即响应 503 状态,而不是让新客户端在所有线程都忙的情况下等待。

我尝试使用各种超时来实现这一点,但效果并不理想。这是我尝试的方法(仅使用一个线程),但它会让新客户端等待 1800 秒,然后以 504 状态响应。

WSGIDaemonProcess xxx user=xxx group=xxx processes=1 threads=1 connect-timeout=10 queue-timeout=10 deadlock-timeout=2000 socket-timeout=1800 listen-backlog=0

如何让服务器只接受与 WSGI 守护进程的线程数相同的连接数?

(服务器运行的是 Ubuntu 14.04,带有 Apache 2.4 和 mod_wsgi 4.5)

答案1

您可以使用 apache 配置中的 maxclients 指令来限制 apache 可以提供的请求数量。

例如 :

最大客户数 200

同一时间仅允许 200 名客户端。

(编辑)

如果一个虚拟主机有特定的问题或特性,那么将其隔离在专用的 apache 实例上(可以在同一硬件上)通常是一个好主意。

您可以尝试限制每个虚拟主机的连接数,但根据这篇文章,您需要额外的模块,如 mod_cbanApache 限制每个 VHOST 的连接数

(/编辑)

相关内容