В документации говорится, что "в основном используется для отладки", что заставило бы меня подумать: "Никогда не включайте его, если у вас нет проблемы и вам нужно выполнить некоторую отладку", однако, прочитав в основном все, что я могу найти, говорит, что разрешить это "opcache.enable_cli 1", но почему? Я не мог найти никакой информации по этому вопросу, поэтому, если кто-нибудь знает, почему я должен включить ее, если в документации в основном говорится, чтобы она была на 0?
Zend OPCache - opcache.enable_cli 1 или 0? Что оно делает?
Ответ 1
Оставьте это. Это прежде всего там для использования при отладке проблем с самим OPcache.
Параметр opcache.enable_cli
позволяет PHP OPcache при запуске PHP-скриптов из командной строки (используя команду php
). Однако имейте в виду, что для PHP 5.x расширение OPcache работает, сохраняя кэшированные коды операций в памяти текущего процесса. Это полезно только тогда, когда процесс, в котором работает PHP, будет обрабатывать несколько запросов, которые могут повторно использовать эти коды операций, например, на веб-сервере или в FastCGI. Для процесса, такого как PHP CLI, который запускает один "запрос" и выходит, он просто уничтожает память и время.
Ответ 2
Благодаря PHP7 и файловому кешированию теперь имеет смысл включить opcache для CLI. Наилучшей возможностью было бы иметь отдельный php.ini для CLI со следующей конфигурацией:
opcache.enable=1
opcache.enable_cli=1
opcache.file_cache="/tmp/php-file-cache"
opcache.file_cache_only=1
opcache.file_cache_consistency_checks=1
opcache.file_cache_only=1
гарантирует, что opcache в памяти отключен и используются только файлы, что и требуется для CLI. Это должно немного увеличить время выполнения.
В php.ini для FPM вы захотите иметь те же настройки, но использовать opcache.file_cache_only=0
, поэтому в оперативной памяти используется opcache, а файловый кеш используется в качестве запасного (что также ускоряет работу FPM, поскольку файл кэш уменьшает время прогрева при перезапуске FPM или сбрасывании opcache, потому что кэшированные файлы остаются).
Таким образом, CLI и FPM совместно используют файловый кеш, а FPM использует кэш в памяти в качестве второго основного кеша для максимальной скорости. Отличное улучшение в PHP7! Просто убедитесь, что вы выбрали каталог для opcache.file_cache
который CLI и FPM могут писать, и что один и тот же пользователь выполняет запись/чтение.
ОБНОВЛЕНИЕ 2017
Я бы не рекомендовал больше использовать файловый кеш с FPM (используйте его только для CLI), потому что при установке opcache.validate_timestamps=0
невозможно сбросить кэш - файловый кеш не позволяет PHP-FPM распознавать любые изменения, потому что opcache_reset()
или даже полный перезапуск PHP-FPM не влияют на файловый кэш и не имеют эквивалента для файлового кэша, поэтому измененные сценарии никогда не замечаются. Я сообщил об этом как " ошибка "/" запрос функции " в марте 2016 года, но в настоящее время это не рассматривается как проблема. Просто будьте осторожны, если вы используете opcache.validate_timestamps=0
!
Ответ 3
По PHP docs:
opcache.enable_cli boolean
позволяет кэшировать код операции для версии CLI для PHP. Это в основном полезно для тестирования и отладки.
Поэтому он должен быть отключен, если вам это действительно не нужно.
Это может быть полезно, если у вас есть какой-то долгосрочный процесс миграции из командной строки (лично я протестировал OPcache v7.0.3 для CLI, выполнив некоторую обширную миграцию script, и я не видел много улучшения производительности).