Подтвердить что ты не робот

Как разделить кеш APC между несколькими процессами PHP при работе в FastCGI?

В настоящее время я запускаю несколько копий PHP/FastCGI, с включенным APC (в Apache + mod_fastcgi, если это имеет значение). Можно ли совместно использовать кеш между процессами? Как я могу проверить, уже ли он разделен? (Я думаю, что параметр apc.mmap_file_mask ini может быть задействован, но я не знаю, как его использовать.)

(Одна из причин, по которой я думаю, что на данный момент он не разделен, заключается в том, что apc.mmap_file_mask, как сообщает веб-интерфейс apc.php, переворачивается между 3 различными значениями при перезагрузке.)

4b9b3361

Ответ 1

APC делает не в настоящее время совместное использование кеша между несколькими рабочими PHP-cgi, работающими под fastcgi или fcgid. Подробнее см. этот запрос функции: "это поведение на данный момент является предполагаемым".

Одно из решений - позволить PHP управлять своими собственными работниками. Вы можете сделать это, используя переменную среды PHP_FCGI_CHILDREN в вашей обертке script (для этого есть множество примеров по всему миру). Вы также должны остановить fastcgi/fcgid от создания более одного PHP-процесса, если вы хотите использовать этот метод.

Недостатком PHP_FCGI_CHILDREN является то, что его управление рабочими не так хорошо, как при использовании fcgid/fastcgi.

Итак, вот и мы. APC в среде fcgid/fastcgi означает предоставление каждому рабочему PHP своего собственного кеша или отключение процесса fcgid/fastcgi в поддержку встроенного управления PHP. Пусть надеется, что это изменится в будущем.

Ответ 2

Пока он не идеален, метод, предложенный Domster, является лучшим. Я делал это в течение короткого времени на некоторых сайтах с низким объемом без ошибок. Я написал подробное объяснение как настроить mod_fastcgi с общим кэшем кода операции прошлой ночью.

Мне было очень важно использовать mod_fastcgi, а не более новый mod_fcgid, потому что mod_fcgid будет отправлять только один запрос за раз в PHP-процесс, независимо от того, сколько детей PHP порождено через PHP_FCGI_CHILDREN.

Ответ 3

Кэш должен делиться между процессами. Вы должны увидеть одно и то же значение для файла mmap между вызовами phpinfo() и apc.php. Он работает для меня с предлагаемыми настройками конфигурации APC по умолчанию:

extension="apc.so"
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.enable_cli=1

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

Возможно, это связано с вашей конфигурацией fastcgi + apache.