Слишком много УСТАНОВЛЕНО соединения с одного IP-адреса в Apache

netstat -ntp |grep 80 показывает слишком много ESTABLISHED соединение с одного IP-адреса. Около 300 из них, и это не атака, и пользователь использует соединение 2G для доступа к Apache. Это касается и других соединений 2G. В результате этого у Apache не хватает детей.

Раньше это показывало слишком много close_wait и после включенияtcp_tw_reuse а также tcp_tw-recycle существует не так много close_wait но количество ESTABLISHED связи увеличились.

Мы используем Ubuntu 11.04 с 48 ГБ оперативной памяти

keepalive On
keepalive timeout 10
max clients 800
max-request-perchild 4000
timeout 300

Я поставил syn_ack до 1 и syn_retries до 2.

На вайфай такой проблемы нет. Соединения закрываются правильно, но с соединениями 2G у Apache не хватает детей и слишком много ESTABLISHED подключение.

Кроме того, я попытался установить тайм-аут по умолчанию от 300 до 30, но поскольку наш проект является хостингом изображений для мобильных телефонов, клиенты не могли загружать изображения должным образом, так как они получают частые тайм-ауты. Также было много 408 сообщений, поэтому изменил его на по умолчанию 300

3 ответа

Решение

tcp_tw_reuse и tcp_tw-recycle и tcp-fin_timeout до 30

Тайм-аут плавника помогает здесь, но повторное использование и повторное использование? Зачем?

время ожидания активности 10

Это просто глупо. Даже с dialup, это должно быть 3 или меньше.

тайм-аут 300

Вы знаете, что это делает? Это может быть значение по умолчанию, но оно снова слишком велико.

Вы можете попытаться захватить часть трафика с помощью wireshark, чтобы точно понять, почему соединения не закрываются.

Использует mod_reqtimeout вариант

Только если клиент очень сильно сломан, и вы не беспокоитесь о предоставлении ему услуг.

мы должны перейти на сервер ngnix

Конечно, он будет обрабатывать медленные соединения гораздо проще, однако вы можете использовать его в качестве прокси-сервера (и вы можете выборочно / прозрачно маршрутизировать определенные подсети через него с помощью iptables)

Проблема связана с низкоскоростными клиентами. Лучший способ решить эту проблему - использовать решение обратного прокси-сервера, например, nginx, лак или аналогичное программное обеспечение, если у вас установлен apache. Хороший обратный прокси-сервер может обрабатывать тысячи соединений без проблем.

Почему установка Nginx в качестве обратного прокси-сервера - хорошая идея?

Вы пытались бросить Timeout директива к чему-то гораздо более низкому, например, 10 или же 5?

В качестве альтернативы, вы можете попробовать отойти от MPF prefork (если это возможно) и использовать управляемую событиями модель, такую ​​как MPM событий в Apache 2.4, или другой веб-сервер, такой как nginx.

Вы также можете использовать nginx (или аналогичный) в качестве обратного прокси-сервера перед Apache. Прокси-сервер будет ждать, пока он не получит весь запрос, прежде чем отправлять исходящий запрос в Apache. В этом запросе не будет задержек в середине.

Проблема с нехваткой детей Apache также может быть вызвана или усугублена Keepalive настройки у вас есть. Рассмотрите возможность выключения или снижения keepalive timeout значение. Конечно, слишком низкое значение может сделать его бесполезным.

Другие вопросы по тегам