У меня есть PHP-приложение, интенсивно использующее базу данных, которое может работать в течение многих часов, обрабатывая и создавая тысячи внешних сетевых подключений.
К этому приложению одновременно будет подключено менее 3 пользователей.
Какой Apache MPM лучше всего подходит для этой рабочей нагрузки: prefork/mod_php или worker/mod_fcgid?
Я использую Debian Lenny x64, одноядерный, 4 ГБ оперативной памяти.
решение1
Для более медленных машин рабочий режим работает лучше и генерирует меньшее использование ЦП и нагрузки.
Для мощных машин, обслуживающих статический контент, prefork mpm примерно на 5% быстрее.
Я рекомендую, если у вас есть возможность, провести несколько тестов с помощью apache benchmark:Apache-бенчмарк
Также вы можете взглянуть на этот бенчмарк:Apache prefork против worker
Ваша база данных установлена на том же сервере?
решение2
Apache имеет два широко используемых модуля MPM — Worker MPM и Pre-fork MPM. PHP.net рекомендует использовать Pre-fork MPM, в то время как большинство экспертов по оптимизации сайтов подталкивают вас к использованию потокового Worker MPM. Удивительно, но нагрузочное тестирование показало относительно небольшую разницу в производительности — и уж точно не такую, которая подтолкнула бы вас к нерекомендуемой реализации на вашем сервере.
решение3
Worker + PHP через FastCGI, как правило, работают хорошо, исторически многие советовали не использовать mod_php с любым потоковым MPM (из-за некоторых сторонних библиотек, которые не очень хорошо с ним работали), использование FastCGI по сути «отсоединяет» PHP от веб-сервера, избегая этой проблемы.
Еще одним плюсом является то, что теперь размер потока/процесса Apache меньше, поэтому вы можете использовать больше потоков/процессов для веб-сервера (обслуживающего статический контент) и иметь несколько процессов PHP, выполняющих динамические части сайта.