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

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

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

** KeepAlive ВКЛ.

MaxKeepAliveRequests 100

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

StartServers 100

MinSpareServers 100

MaxSpareServers 150

ServerLimit 300

MaxClients 300

MaxRequestsPerChild 3000 **

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

Подобно адаптеру, переключитесь на «рабочий» MPM и масштабируйте до тысяч одновременных подключений.

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

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

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

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

Рассмотрите возможность перехода на рабочий MPM или обновления до apache 2.4.

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

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