keepAlive в Apache заставляет apache достигать max_clients

У меня есть Apache 2.2, работающий на Ubuntu 11.4 с 16 ГБ ОЗУ, для хостинга изображений с мобильных телефонов через GPRS, так как соединение медленное, я включил keepalive и установил время 6,** в зависимости от среднего времени загрузки. Но обычно даже с 10-20 пользователей apache достигает своих max_clients, равных 300, и предотвращает дальнейшие подключения. Но интересно даже то, что ** с отключенной поддержкой активности Apache достигает своих максимальных значений и отказывается принимать новое подключение

**KeepAlive ON / пробовал Off также

MaxKeepAliveRequests 100

keepalivetimeout до 6 (так как много динамических изображений и медленное соединение)

StartServers 100

MinSpareServers 100

MaxSpareServers 150

ServerLimit 300

MaxClients 300

MaxRequestsPerChild 3000 **

Что я должен сделать, чтобы улучшить производительность, не нажимая max_clients. Модуль кэширования и дефляции также включен.Можно установить для maxrequestperchild значение 10, чтобы не охватывать max-клиентов.

2 ответа

Вы используете Apache 2.2 с prefork MPM; общеизвестно, что он не подходит для обслуживания большого количества одновременных соединений.

Попробуйте либо перейти на рабочий MPM, либо перейти на Apache 2.4.

Даже Apache 2.2, использующий рабочий MPM, может обслуживать тысячи одновременных запросов с 16 ГБ памяти.

Особенно на мобильных устройствах установка KeepAliveTimeout слишком низко повредит вам; рассмотрите возможность увеличения его как минимум до 30 секунд.

Подобно adaptr, swith к "рабочему" MPM и масштабируется до тысяч одновременных соединений.

Обратите внимание, что максимальная продолжительность ваших подключений также контролируется TimeOut Параметр Apache: установите для него низкое значение, поскольку это значение "ожидания простоя ввода-вывода". Ну, не на низком уровне, поскольку клиенты GPRS работают медленно, но по умолчанию 300 секунд - это слишком высокий уровень.

Даже при низком значении параметра "TimeOut" клиенты по-прежнему решают, сколько раз они будут держать соединение открытым. Возможно, вы захотите проверить mod_reqtimeout ( http://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html), который помогает как минимум блокировать медленные атаки, подобные медленным.

Можно определить другие таймауты, но это зависит от конкретных модулей / использования. Я контролирую более строгие тайм-ауты через mod_proxy и mod_fcgid. Когда возможно заставить соединение никогда не использовать больше, чем N секундных часов, вы точно знаете, каков ваш номинальный показатель прибытия до того, как ваш MaxClients будет достигнут (это MaxClients / N новый конн / сек). Это во многом зависит от того, что вы используете в своем Apache.

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