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.
По wifi такой проблемы нет. Соединения закрываются правильно, но с соединениями 2G в Apache заканчиваются дети и слишком много ESTABLISHED
подключение.
также я пробовал установить тайм-аут от 300 до 30 по умолчанию, но поскольку наш проект - это хостинг изображений для мобильных телефонов, клиенты не могли правильно загружать изображения, так как у них часто случаются перерывы в работе. 408 сообщения, поэтому изменил его на значение по умолчанию 300
Проблема связана с низкоскоростными клиентами. Лучший способ решить эту проблему - использовать решение обратного прокси, например. nginx, varnish или подобное программное обеспечение, если из вашего apache. Хороший обратный прокси-сервер может без проблем обрабатывать тысячи подключений.
tcp_tw_reuse и tcp_tw-recycle и tcp-fin_timeout до 30
Здесь помогает тайм-аут плавника, но повторное использование и повторное использование? Зачем?
время ожидания поддержки активности 10
Это просто глупо. Даже при коммутируемом доступе это должно быть 3 или меньше.
тайм-аут 300
Вы знаете, что это значит? Это может быть значение по умолчанию, но оно снова слишком велико.
Вы можете попробовать захватить часть трафика с помощью wirehark, чтобы точно узнать, почему соединения не закрываются.
Использует параметр mod_reqtimeout
Только в том случае, если клиент очень сильно сломан, и вы не беспокоитесь о предоставлении ему услуг.
мы должны перейти на сервер ngnix
Он, безусловно, будет намного легче обрабатывать медленные соединения, однако вы можете использовать его в качестве прокси (и вы можете выборочно / прозрачно маршрутизировать определенные подсети через это, используя iptables)
Вы пробовали отбросить Timeout
директива к чему-то гораздо более низкому, например 10
или 5
?
В качестве альтернативы вы можете попробовать отказаться от предварительного форка MPM (если возможно) и использовать модель, управляемую событиями, такую как событие MPM в Apache 2.4 или другой веб-сервер, такой как nginx.
Вы также можете использовать nginx (или аналогичный) в качестве обратного прокси перед Apache. Прокси-сервер будет ждать, пока он не получит весь запрос, прежде чем отправлять восходящий запрос к Apache. Тогда у этого запроса не будет задержек в середине.
Проблема с исчерпанием детей Apache также может быть вызвана или усугублена Keepalive
настройки у вас есть. Попробуйте выключить это или понизить keepalive timeout
стоимость. Слишком низкое значение, конечно, может сделать его бесполезным.