Назад | Перейти на главную страницу

Apache с mod_wsgi - как отклонять запросы, если все потоки заняты?

У нас есть сервер, на котором работает Apache, и один из vhosts использует 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)

Вы можете использовать директиву maxclients в конфигурации apache, чтобы ограничить количество запросов, которые может обслуживать apache.

Например :

MaxClients 200

Пропускает одновременно только 200 клиентов.

(редактировать)

Если у одного виртуального хоста есть определенные проблемы или особенности, часто бывает полезно изолировать его на выделенном экземпляре apache (может быть на том же оборудовании).

Вы можете попытаться ограничить соединения для каждого виртуального хоста, но, согласно этому сообщению, вам понадобится дополнительный модуль, например mod_cban. Ограничение количества подключений Apache на VHOST

(/редактировать)