Я пытаюсь ускорить работу веб-сайта с большим количеством изображений, которые обслуживаются из отдельного статического субдомена. 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?
Вы должны переключиться на событие, да.
С предварительным форком каждое соединение занимает 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.