Стоит ли использовать один пул для многих веб-сайтов в Apache+PHP-FPM?

Стоит ли использовать один пул для многих веб-сайтов в Apache+PHP-FPM?

Если имеется много небольших веб-сайтов (около 300) с небольшим трафиком, следует ли им всем использовать один и тот же пул или лучше иметь отдельный пул для каждого из них?

Предположим, что веб-сайты являются доверенными, и преимущества наличия отдельного пользователя/группы в пуле (например, лучший контроль доступа/разрешений) здесь не рассматриваются.

решение1

Обычно я предпочитаю использовать один пул на сайт (но, возможно, здесь это не так, читайте все).

Основная причина этого в том, что это позволяет использовать настройки php для каждого веб-сайта. И эти настройки могут меняться в зависимости от потребностей веб-сайта, но также и для лучшего разделения ресурсов веб-сайта. Например, с измененными временными каталогами или open_basedir_settings:

(...)
env[TMP] = /path/to/client/var/tmp
env[TMPDIR] = /path/to/client/var/tmp
env[TEMP] = /path/to/client/var/tmp
env[DOCUMENT_ROOT] = /path/to/client/www
php_admin_value[open_basedir] = ".:/path/to/client/www:/path/to/client/var/tmp:/path/to/client/var/log"
php_admin_value[upload_tmp_dir]="/path/to/client/var/tmp"
(...)

Вы также можете использоватьchrootрежим для php-fpm, но это сложнее. И в этом случае, с chrooted pool, возможно, было бы проще использовать только один пул для всех клиентов (то есть общий chroot, что не очень хорошо на самом деле). Это потому, что такие вещи, как apc, являются общими для всех пулов, и это означает, что при использовании нескольких chrooted pools вы можете получить несколько файлов с одинаковыми путями в разных пулах, и apc будет хранить только одну кэшированную версию файла. Фактически, в случае apc+chroot лучшим решением будет запуск нескольких экземпляров php-fpm, с одним пулом на экземпляр. Непростая задача для 300 веб-сайтов.

Затем вы можете управлять тем, сколько процессов php может быть использовано для каждого веб-сайта с помощью pm.[static/dynamic]настроек пула. Обратите внимание, что для 300 небольших веб-сайтовэто может стать проблемойЕсли большое количество этих веб-сайтов неактивны, то большая часть вашей памяти будет использоваться процессом пула, который ничего не делает.

В вашем случае трафик низкий, а веб-сайты не загружены, поэтому наличие более 300 (как минимум) процессов пула, работающих на вашем компьютере и не выполняющих никаких действий, являетсяперебор. А в вашем конкретном случае я думаю, что вместо этого я бы использовал небольшое количество пулов (может быть, вы можете сгруппировать некоторые веб-сайты вместе, по приложениям? по версиям? по потребностям?), имея каждый пул, способный запускать несколько веб-сайтов. Или, может быть, только один, я бы попытался использовать группы веб-сайтов, чтобы применить к ним некоторые ограничения open_basedir, но если они все действительно одинаковы, вы могли бы работать только с одним пулом.

Связанный контент