Слишком много УСТАНОВЛЕНО соединения с одного 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
значение. Конечно, слишком низкое значение может сделать его бесполезным.