Только что прочитал Как сделать WordPress стабильным на EC2-Micro
В разделе «Настройка Apache» я не могу понять, как он рассчитывает свои числа для своей конфигурации prefork.
Он объясняет, как получить числа для среднего процесса, которые я получаю. Но потом:
Или примерно 53 МБ на процесс ... В этом случае десять потоков должны быть безопасными. Это означает, что если мы получим более десяти одновременных запросов, остальные запросы будут помещены в очередь до тех пор, пока рабочий поток не станет доступным. Чтобы максимизировать производительность, мы также настроим систему так, чтобы это количество потоков было доступно все время.
Из 53 МБ на процесс с 613 МБ ОЗУ он каким-то образом получает эту конфигурацию, которую я не понимаю:
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxClients 10
MaxRequestsPerChild 4000
</IfModule>
Как именно он получает это из 53 МБ на процесс при ограничении 613 МБ?
Бонусный вопрос
Каковы были бы хорошие настройки для небольшого экземпляра (1,7 ГБ памяти) из приведенного ниже?
bitnami@ip-10-203-39-166:~$ ps xav |grep httpd
1411 ? Ss 0:00 2 0 114928 15436 0.8 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1415 ? S 0:06 10 0 125860 55900 3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1426 ? S 0:08 19 0 127000 62996 3.5 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1446 ? S 0:05 48 0 131932 72792 4.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1513 ? S 0:05 7 0 125672 54840 3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1516 ? S 0:02 2 0 125228 48680 2.7 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1517 ? S 0:06 2 0 127004 55796 3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1518 ? S 0:03 1 0 127196 54208 3.0 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
1531 ? R 0:04 0 0 127500 54236 3.0 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
Идея расчета заключается в том, что вам нужно оставить некоторую память для других вещей - операционной системы и других служб, запущенных на экземпляре. После этого все, что у вас осталось, вы делите на средний размер используемой памяти (размер резидентного набора - столбец RSS), чтобы получить максимальное количество потоков, которые ваш сервер может обрабатывать без нехватки памяти.
Тем не менее, мне нравится делать свои вычисления немного иначе, но я расскажу об этом позже.
Из httpd.conf:
prefork MPM
В показанной вами конфигурации будет постоянно выполняться 10 процессов: вы запускаете 10 процессов (StartServers), и у вас есть максимум 10 серверных процессов, которые вы разрешаете (MaxClients). В этом случае MinSpareServers и MaxSpareServers не должны вступать в игру. После того, как серверный процесс обработал 4000 запросов, он будет остановлен и на его месте будет создан новый (чтобы попытаться ограничить утечки памяти и т. Д.)
Таким образом, предполагается, что все остальное на вашем сервере будет использовать около 80 МБ памяти, а у вас останется 530 МБ. Разделите это на средний размер процесса (53 МБ), чтобы получить 10 процессов.
Я бы предположил, что это предположение немного неверно. Если вы используете что-то еще (например, MySQL) на сервере, вам определенно нужно оставить больше памяти в резерве. Кроме того, здесь нет места для вариаций. Для оценки я бы оставил не менее 120 МБ для операционной системы и других служб, а затем уменьшил бы остаток на 10% для вариаций. Итак, максимум около 8 процессов apache.
<IfModule prefork.c>
StartServers 2
MinSpareServers 1
MaxSpareServers 3
MaxClients 8
MaxRequestsPerChild 1000
</IfModule>
Итак, с вышесказанным - максимум 8 процессов. Мы только запускаем 2. Нам бы хотелось, чтобы в любой момент времени было хотя бы одно бездействие, но не более трех. Кроме того, поскольку память является проблемой, MaxRequestsPerChild был уменьшен.
Теперь я предпочитаю вычислять число, фактически запустив сервер на некоторое время, затем остановив apache и посмотрев, сколько памяти использует остальная часть системы. Вычтите это число из общей суммы, возьмите 90% и разделите на средний размер процесса apache. Это дает более реалистичное значение, особенно для более сложных настроек.
Следует отметить, что в случае с ограниченным объемом памяти Nginx, вероятно, предпочтительнее Apache в качестве веб-сервера. Кроме того, вам определенно понадобится место для подкачки на t1.micro (хотя вы не должны часто его использовать).
Установка MinSpareServers на то же значение, что и MaxSpareServers, не имеет особого смысла - это, скорее, сводит на нет цель поддержки гистерезиса для управления спросом.
Я не вижу раздела «настройка apache» в сообщении, на которое вы ссылаетесь. То, что я вижу, похоже, не дает никакого объяснения того, как автор измерил площадь веб-сервера. Видеть этот вопрос и ответы.
Значение keepAliveTimeout, равное 5, кажется смехотворно высоким - и этому тоже не дается никаких объяснений.
Я не вижу логики установки maxKeepAliveRequests на «примерно две трети MaxClients»
Предполагая, что процесс в среднем 53 МБ (что мне кажется довольно большим) и 613 МБ свободно памяти, я бы начал с чего-то вроде:
keepAliveTimeout 1
maxKeepAliveRequests 15
<IfModule prefork.c>
StartServers 5
MinSpareServers 2
MaxSpareServers 4
MaxClients 10
MaxRequestsPerChild 4000
</IfModule>
Но если у вас есть много статических файлов, на которые ссылается каждая страница, вы можете принудительно запустить больше серверов.
Значение maxrequestsperchild 1000, вероятно, подходит.