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

Apache2,4 + Prefork + Keep-alive включен

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

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

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

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

Пример:

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

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

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