Является ли кеш-код операции APC совместно используемыми пулами/рабочими PHP-FPM? - программирование
Подтвердить что ты не робот

Является ли кеш-код операции APC совместно используемыми пулами/рабочими PHP-FPM?

В Интернете много дискуссий о том, что вызов apc_cache_clear() в CLI не очищает кеш-коды операций от "веб-процессов PHP", независимо от того, запущены они внутри Apache или FPM (см. How для очистки записей кэша APC?). В качестве предлагаемого решения можно создать простую страницу PHP, которая вызывает apc_cache_clear(), и вызывать это из CLI. Symfony ApcBundle делает это.

Если apc_cache_clear() из CLI не освобождает кеш от Apache/FPM, делает ли он между рабочими FPM? Если я вызываю /clear _apc_cache.php через HTTP, он запускается только одним из рабочих процессов FPM. Таким образом, кеш-код операции APC действительно, разделяемый между пулами и рабочими, - и более конкретный: он автоматически очищается от всех работников?

4b9b3361

Ответ 1

Все рабочие пользователи php-fpm используют один и тот же кеш-код операции как родительский php-fpm-процесс; . Если у вас есть файл /apc _clear_cache.php, и вы вызываете это через HTTP (используя что-то вроде curl), вы очищаете кеш-код операции для всех работников, используя один и тот же основной процесс php-fpm.

Эта статья статьи в блоге содержит очень хорошее объяснение того, как работает apc и как его эффективно очищать во время выпуска.

Ответ 2

Вы можете очистить кеш кода операции через кли без необходимости развернуть файлы на свой веб-сайт, если вы выполняете script напрямую через интерфейс FastCGI.

Я создал этот смысл, который вы можете использовать на своих серверах, чтобы очистить кеш php5-fpm.

Если вы используете сокеты unix:

php clear-apc.php --sock /var/run/php5-fpm.sock

В противном случае:

php clear-apc.php --port=[port]

или опустить по умолчанию 127.0.0.1:9000

Ответ 3

Я только что узнал, что разные пулы также используют один и тот же APC-кеш, по крайней мере, в PHP 5.4 с FPM и в отношении содержимого кэша кода операции.

Вот как я это заметил:

Я создал несколько пулов PHP-FPM, где каждый пул chrooted в каталоге /srv/www/domain.com/.

Основным местом для скриптов PHP является /srv/www/domain.com/docroot/.

Теперь, если я создам файл /srv/www/domain _1.com/docroot/test.php и загружаю script, он показывает, что он должен показывать.

Однако, когда я создаю файл /srv/www/domain _2.com/docroot/test.php, содержимое отображается также под доменом_1.com.

Я думаю, это происходит потому, что APC использует расположение файла в качестве ключа для своего кеша, и в обоих случаях ключ является /docroot/test.php.

Очистка кеша операций может быть ограничена только одним пулом. Я не тестировал это, хотя.

ИЗМЕНИТЬ Очистка кеша кода операции не восстанавливается в один пул приложений, полный кэш APC очищается при вызове apc_cache_clear().

Я также попытался использовать apc.mmap_file_mask, чтобы указать другую маску для каждого пула. Это ничего не изменило, обновления в одном файле пула приложений были замечены в других пулах.

Это поведение наблюдалось при установке apc.stat = 0. Все изменения в файлах контролируются с помощью lsyncd, заставляя перекомпилировать запись в кэше APC.

  • Теро