Apache2,4 + Prefork + Keep-alive On

Я пытаюсь ускорить работу веб-сайта с большим количеством изображений, которые обслуживаются из отдельного статического субдомена. example.com (тот же IP, что и www.)

Используя инструмент pingdom, было обнаружено, что первые 5-6 запросов (на static.example.com) устанавливают полные соединения (DNS + SSL + Send + Wait + Receive + Connect).

Имеет ли это какое-либо отношение к конфигурации prefork?

<IfModule mpm_prefork_module>
StartServers            20
    MinSpareServers           20
    MaxSpareServers          20
    ServerLimit             150
    MaxRequestWorkers        150
    MaxConnectionsPerChild   10000
    MaxRequestsPerChild 500
</IfModule>

Это машина размером 4 ГБ с небольшим трафиком.

Средний размер apache:

ps aux | grep 'apache2' | awk '{print $ 6/1024;}' | awk '{avg + = ($ 1 - avg) / NR;} END {print avg "MB";}'

11,2921 МБ

MySQL примерно 500 МБ

KeepAlive On, MaxKeepAliveRequests 100, KeepAliveTimeout 5

Не знаю, как это решить. Помогает ли переключение на модуль MPM-Event?

0
задан 18 January 2018 в 12:32
1 ответ

Вы должны переключиться на событие, да.

С предварительным форком каждое соединение занимает 1 процесс. С точки зрения ЦП порождение процессов обходится дороже, чем создание новых потоков, если вы не «предварительно загружаете» их при запуске.

Но все же для обслуживания статического контента и этих спецификаций вы можете легко иметь httpd с событием mpm и легко разрешить 1000 потоков с несколькими процессами.

Пример:

StartServers            1
ServerLimit             5
MinSpareThreads         100
MaxSpareThreads         600
ThreadsPerChild         200
ThreadLimit             200
MaxRequestWorkers       10000
MaxConnectionsPerChild  10000000

Если вы используете префорк, потому что вас заставляют, например, имея модуль mod_php, который не является потокобезопасным, рассмотрите возможность перехода на mod_proxy_fcgi -> PHP-FPM.

php-fpm информация о httpd wiki

1
ответ дан 4 December 2019 в 16:02

Теги

Похожие вопросы