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

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

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

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

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

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

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

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

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

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

Кэш должен быть разделен между процессами. Вы должны увидеть одно и то же значение для файла 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.