В журналах ошибок я вижу:
server reached MaxClients setting, consider raising the MaxClients setting
Моя настройка MaxClients равна 150. Однако, когда я вычисляю то, что кажется оптимальной настройкой MaxClients, я получаю:
Mem used by 1 Apache process = 16
Mem available to Apache = 197
MaxClients = 12 (197/16)
Так следует ли мне сбить MaxClients до 12, потому что мои расчеты показывают, что это вся доступная мне оперативная память, или мне следует поднять предел, как предлагает журнал ошибок (или мои расчеты бесполезны, потому что я что-то неправильно понимаю)?
Рассмотрите возможность отключения KeepAlive в вашем httpd.conf, если вы используете предварительный форк Apache. Вместо того, чтобы каждый дочерний элемент, удерживающий открытое неактивное соединение, Apache закроет каждое соединение после его выполнения. Это уменьшит общее количество подключений и дочерних процессов, необходимых для обслуживания. Это добавляет немного дополнительного времени, потому что каждый новый запрос требует повторного согласования с вашим сервером, а не повторного использования открытого соединения.
(править) О да, вопрос. Я бы оставил MaxClients в покое или установил его в зависимости от имеющейся у вас оперативной памяти. Предполагая, что у вас более чем достаточно оперативной памяти, практическое правило - в 2-4 раза больше ядер процессора, чем у вас, если ваш бэкэнд не очень медленный, иначе используйте оперативную память в качестве ограничивающего фактора. Однако я думаю, что отключение KeepAlive снизит количество детей, которые вам нужны, до чего-то вполне нормального, и вы перестанете достигать предела.
(edit2) Теперь вот где все становится сложно. Если ваш сервер Apache является сервером приложений, который в основном запускает код PHP, Ruby и т. Д. И обрабатывает данные, которые он получает с различных бэкэндов или с диска на отображаемые страницы, то правило 2-4x работает. Как правило, вы будете сжигать 250 мс ЦП на просмотр страницы, если это тяжелая некэшированная страница или 4 просмотра страниц на ядро. Если у вас есть автономный сервер, вы сможете обслуживать больше запросов, потому что многие из них будут небольшими изображениями, css, js и т. Д., Которые обычно обслуживаются с другого набора серверов для сервера приложений. Я предполагаю, что у вас есть один сервер, поэтому лучше всего оставить все это в покое.
На моей последней работе мы запускали интерфейсные машины 8 ядер / 8 ГБ с 50 MaxClients и KeepAlive Off, которые работали очень хорошо. В некоторых случаях установка MaxClients на 100 давала немного лучшие тесты, но общая задержка генерации страниц увеличивалась, потому что большую часть времени мы блокировали различные серверные части или начинали испытывать нехватку ресурсов ЦП.
Вместо того, чтобы выполнять этот расчет, я бы поэкспериментировал, чтобы увидеть, с чем действительно способен справиться ваш сервер. Этот расчет является более или менее ориентировочным, но чтобы быть уверенным в своем сервере, вам просто нужно подчеркнуть его, чтобы узнать, возможно ли это.