Как разделить кэш APC между несколькими процессами PHP при работе под FastCGI?
В настоящее время я использую несколько копий PHP/FastCGI с включенным APC (под Apache+mod_fastcgi, если это имеет значение). Могу ли я разделить кеш между процессами? Как я могу проверить, если он уже открыт? (Я думаю apc.mmap_file_mask
Установка ini может быть задействована, но я не знаю, как ее использовать.)
(Одна из причин, по которой я не apc.mmap_file_mask
, как сообщает веб-интерфейс apc.php, при перезагрузке переключается между 3 различными значениями.)
3 ответа
В настоящее время APC не разделяет свой кеш между несколькими работниками php-cgi, работающими под управлением fastcgi или fcgid. Посмотрите этот запрос функции для деталей: "это поведение является намеченным на данный момент".
Один из обходных путей - позволить PHP управлять своими работниками. Вы можете сделать это, используя переменную окружения PHP_FCGI_CHILDREN в вашем скрипте-оболочке (для этого есть множество примеров во всем Интернете). Вы также должны остановить fastcgi/fcgid от запуска более чем одного PHP-процесса, если вы хотите использовать этот метод.
Недостаток PHP_FCGI_CHILDREN заключается в том, что его управление рабочими не так хорошо, как в fcgid/fastcgi.
Итак, мы здесь. APC в среде fcgid/fastcgi означает предоставление каждому работнику PHP своего собственного кэша или отключение процесса fcgid/fastcgi в пользу встроенного управления PHP. Будем надеяться, что это изменится в будущем.
Хотя он не идеален, метод, предложенный Домстером, является лучшим. Я делал это в течение короткого времени на некоторых сайтах с небольшим объемом без ошибок. Я написал подробное объяснение о том, как настроить mod_fastcgi с общим кэшем кода операции прошлой ночью.
Я обнаружил, что очень важно использовать 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 должно быть точно одним из допустимых значений. Так что, если вам не хватает одного из этих крестиков, невозможно сказать, что вы получите.
Может быть, это касается вашей конфигурации fastcgi+apache.