Жаль, что Документация НЕ говорит нам, как правильно скомпилировать opcache / отключить его, или обойти автоконфинг исходного кода PHP 5.6.24+, чтобы PHP компилировался! :-(
Филип ОбертонеСингер Ридло
@ Fred-ii- «Существует множество настроек, которые могут нуждаться в корректировке. Понимание того, как это работает, и выявление проблем на этапе стабилизации процесса выпуска PHP 5.5 очень поможет». ... Это сообщение в блоге не очень полезно. Это не объясняет, как понять, как это работает или как лучше настроить параметры :(
icc97
Ответы:
371
Монтаж
OpCache компилируется по умолчанию на PHP5.5 +. Однако по умолчанию он отключен. Чтобы начать использовать OpCache в PHP5.5 +, вам сначала нужно его включить. Для этого вам нужно будет сделать следующее.
Также обратите внимание, что вам придется использовать zend_extensionдирективу вместо «нормальной» extensionдирективы, потому что она влияет на реальный движок Zend (то есть на то, что запускает PHP).
использование
В настоящее время есть четыре функции, которые вы можете использовать:
Возвращает массив, содержащий текущую используемую конфигурацию, которую использует OpCache. Это включает в себя все настройки ini, а также информацию о версии и занесенные в черный список файлы.
Это вернет массив с информацией о текущем состоянии кэша. Эта информация будет включать в себя такие вещи, как: состояние кэша (включен, перезапуск, заполнение и т. Д.), Использование памяти, попадания, пропуски и некоторая другая полезная информация. Он также будет содержать кэшированные скрипты.
Есть несколько графических интерфейсов, созданных для поддержки OpCache и создания полезных отчетов. Эти инструменты используют вышеупомянутые функции.
OpCacheGUI
Отказ от ответственности Я являюсь автором этого проекта
Что-нибудь в отношении PHP-CLI? Как CLI использует это? Когда FPM перезапускается, OPCache сбрасывается - это также влияет на OPCache CLI? Является ли CLI OPCache отдельным или он совместно использует тот же пул кэша с FPM? Спасибо!
Шахрияр Иманов
3
OpCache был включен по умолчанию для меня в моей последней установке на Ubuntu 14.04, apache 2.4.7, php 5.5.9.
Jstats
Привет, на вашем третьем скриншоте cache_full имеет значение false, я предполагаю, что он связан с полным кэшированием страниц. Не могли бы вы сказать мне, как включить его? (сделай это правдой)
brucekaushik
Я ошибаюсь, это не для кэширования полной страницы, но оно будет отображаться как истинное, если память, используемая кешем, заполнена. В любом случае спасибо!
brucekaushik
zend_extension = C: \ path \ to \ php_opcache.dll (win) - Добавление этой строки в php.ini работает нормально.
Калидасан
152
OPcache заменяет APC
Поскольку OPcache предназначен для замены модуля APC, невозможно запустить их параллельно в PHP. Это хорошо для кэширования кода операции PHP, поскольку ни один из них не влияет на то, как вы пишете код.
Однако это означает, что если вы в настоящее время используете APC для хранения других данных (через apc_store()функцию), вы не сможете сделать это, если решите использовать OPCache.
Вам нужно будет использовать другую библиотеку, такую как APCu или Yac, которая хранит данные в общей памяти PHP, или переключиться на использование чего-то вроде memcached, который хранит данные в памяти в отдельном процессе для PHP.
Кроме того, OPcache не имеет эквивалента индикатора выполнения загрузки, присутствующего в APC. Вместо этого вы должны использовать прогресс загрузки сеанса .
Настройки для OPcache
Документацию по OPcache можно найти здесь со всеми перечисленными здесь параметрами конфигурации . Рекомендуемые настройки:
; Sets how much memory to use
opcache.memory_consumption=128;Sets how much memory should be used by OPcache for storing internal strings ;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000;How often (in seconds) to check file timestamps for changes to the shared;memory storage allocation.
opcache.revalidate_freq=60;If enabled, a fast shutdown sequence is used for the accelerated code;The fast shutdown sequence doesn't free each allocated block, but lets;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Если вы используете любую библиотеку или код, который использует аннотации кода, вы должны включить сохранение комментариев:
opcache.save_comments=1
Если отключено, все комментарии PHPDoc удаляются из кода, чтобы уменьшить размер оптимизированного кода. Отключение «Комментарии к документу» может привести к поломке некоторых существующих приложений и платформ (например, Doctrine, ZF2, PHPUnit)
Это рекомендуемые настройки для производственных сред, для разработки или для обоих?
Marcvangend
1
Возможно, с моей стороны возникло недоразумение, что такое opcache и для чего он используется, но я настроил и протестировал его с помощью сценария состояния PeeHaa, приведенного ниже. Все работает. Но я все еще задаю вопрос ОП. "Как это использовать?" Это не для кеширования взглядов и тому подобное?
isimmons 10.10.13
3
@isimmons «OPcache повышает производительность PHP, сохраняя байт-код предварительно скомпилированного скрипта в общей памяти, тем самым устраняя необходимость в PHP загружать и анализировать скрипты при каждом запросе».
Данак
1
@marcvangend Хороший вопрос! Я думаю, что кэширование имеет только реальный смысл в работе, поэтому эти настройки, вероятно, являются настройками производства.
Sliq
3
Может кто-нибудь объяснить, почему производительность рекомендуемых настроек хуже, чем настройки по умолчанию, или когда они должны начать действовать?
RP
19
Я собираюсь оставить свои два цента за то, что я использую opcache.
Я сделал обширную структуру со множеством полей, методов проверки и перечислений, чтобы иметь возможность общаться с моей базой данных.
Без opcache
При использовании этого сценария без opcache, и я отправляю 9000 запросов за 2,8 секунды на сервер apache, он достигает максимальной скорости 90-100% в течение 70-80 секунд до тех пор, пока не будет обработан все запросы.
Total time taken: 76085 milliseconds(76 seconds)
С включенным opcache
При включенном opcache он работает с 25-30% времени процессора в течение примерно 25 секунд и никогда не пропускает 25% использования процессора.
Total time taken: 26490 milliseconds(26 seconds)
Я создал файл черного списка opcache, чтобы отключить кэширование всего, кроме фреймворка, который является статическим и не требует изменения функциональности. Я явно выбираю только файлы фреймворка, чтобы я мог разрабатывать, не беспокоясь о перезагрузке / проверке файлов кеша. Кэширование всего сохраняет секунду на общем количестве запросов.25546 milliseconds
Это значительно расширяет объем данных / запросов, которые я могу обработать в секунду, даже если сервер не сломается.
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;Просто замените; с вводом в INI-файл. Но это то, что я использовал. в основном материал по умолчанию
Tschallacka
1
Кстати, я запускаю это с помощью memcache, выполняю 2100 запросов к базе данных в секунду, запускаю сценарий, который я использую, в течение 150 микросекунд (около
1/6
1
Opcache кэширует файлы php в скомпилированном виде в памяти. Таким образом, вам больше не нужно читать с диска, компилировать и оптимизировать файлы парсером php. Memcache - это то, что вы можете использовать для хранения переменных между сессиями. Например, у пользователя есть скрипт обновления, который запрашивает те же параметры в течение 10 секунд, пока пользователь смотрит на экран. Вы можете использовать mem cache для однократной компиляции запроса, а затем продолжать запрашивать скомпилированный запрос из памяти, а не восстанавливать его.
Чаллака
2
это не так. opcache.revalidate_freq=60;определяет, как долго файл может находиться в памяти в секундах. когда время истекло, он перекомпилирует файл.
Чаллака
3
Фактически, opcache.revalidate_freqконтролирует, как часто скрипт проверяется на наличие изменений (в зависимости от того, была ли изменена его временная метка). Таким образом, если временная метка скрипта остается такой же, как в последний раз, когда он был скомпилирован, она не будет перекомпилирована. Все это предполагает, что вы не изменили opcache.validate_timestampsнастройку, которая включена по умолчанию.
jjlin
4
С PHP 5.6 на Amazon Linux (должно быть то же самое на RedHat или CentOS):
Ответы:
Монтаж
OpCache компилируется по умолчанию на PHP5.5 +. Однако по умолчанию он отключен. Чтобы начать использовать OpCache в PHP5.5 +, вам сначала нужно его включить. Для этого вам нужно будет сделать следующее.
Добавьте следующую строку в ваш
php.ini
:Обратите внимание, что когда путь содержит пробелы, вы должны заключить его в кавычки:
Также обратите внимание, что вам придется использовать
zend_extension
директиву вместо «нормальной»extension
директивы, потому что она влияет на реальный движок Zend (то есть на то, что запускает PHP).использование
В настоящее время есть четыре функции, которые вы можете использовать:
opcache_get_configuration()
:Возвращает массив, содержащий текущую используемую конфигурацию, которую использует OpCache. Это включает в себя все настройки ini, а также информацию о версии и занесенные в черный список файлы.
opcache_get_status()
:Это вернет массив с информацией о текущем состоянии кэша. Эта информация будет включать в себя такие вещи, как: состояние кэша (включен, перезапуск, заполнение и т. Д.), Использование памяти, попадания, пропуски и некоторая другая полезная информация. Он также будет содержать кэшированные скрипты.
opcache_reset()
:Сбрасывает весь кеш. Это означает, что все возможные кэшированные сценарии будут проанализированы снова при следующем посещении.
opcache_invalidate()
:Делает недействительным определенный кэшированный скрипт. Это означает, что сценарий будет проанализирован снова при следующем посещении.
Обслуживание и отчеты
Есть несколько графических интерфейсов, созданных для поддержки OpCache и создания полезных отчетов. Эти инструменты используют вышеупомянутые функции.
OpCacheGUI
Отказ от ответственности Я являюсь автором этого проекта
Особенности:
Скриншоты:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-статус
Особенности:
Скриншот:
URL: https://github.com/rlerdorf/opcache-status
opcache-гуй
Особенности:
Скриншот:
URL: https://github.com/amnuts/opcache-gui
источник
OPcache заменяет APC
Поскольку OPcache предназначен для замены модуля APC, невозможно запустить их параллельно в PHP. Это хорошо для кэширования кода операции PHP, поскольку ни один из них не влияет на то, как вы пишете код.
Однако это означает, что если вы в настоящее время используете APC для хранения других данных (через
apc_store()
функцию), вы не сможете сделать это, если решите использовать OPCache.Вам нужно будет использовать другую библиотеку, такую как APCu или Yac, которая хранит данные в общей памяти PHP, или переключиться на использование чего-то вроде memcached, который хранит данные в памяти в отдельном процессе для PHP.
Кроме того, OPcache не имеет эквивалента индикатора выполнения загрузки, присутствующего в APC. Вместо этого вы должны использовать прогресс загрузки сеанса .
Настройки для OPcache
Документацию по OPcache можно найти здесь со всеми перечисленными здесь параметрами конфигурации . Рекомендуемые настройки:
Если вы используете любую библиотеку или код, который использует аннотации кода, вы должны включить сохранение комментариев:
источник
Я собираюсь оставить свои два цента за то, что я использую opcache.
Я сделал обширную структуру со множеством полей, методов проверки и перечислений, чтобы иметь возможность общаться с моей базой данных.
Без opcache
При использовании этого сценария без opcache, и я отправляю 9000 запросов за 2,8 секунды на сервер apache, он достигает максимальной скорости 90-100% в течение 70-80 секунд до тех пор, пока не будет обработан все запросы.
Total time taken: 76085 milliseconds(76 seconds)
С включенным opcache
При включенном opcache он работает с 25-30% времени процессора в течение примерно 25 секунд и никогда не пропускает 25% использования процессора.
Total time taken: 26490 milliseconds(26 seconds)
Я создал файл черного списка opcache, чтобы отключить кэширование всего, кроме фреймворка, который является статическим и не требует изменения функциональности. Я явно выбираю только файлы фреймворка, чтобы я мог разрабатывать, не беспокоясь о перезагрузке / проверке файлов кеша. Кэширование всего сохраняет секунду на общем количестве запросов.
25546 milliseconds
Это значительно расширяет объем данных / запросов, которые я могу обработать в секунду, даже если сервер не сломается.
источник
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
Просто замените; с вводом в INI-файл. Но это то, что я использовал. в основном материал по умолчаниюopcache.revalidate_freq=60;
определяет, как долго файл может находиться в памяти в секундах. когда время истекло, он перекомпилирует файл.opcache.revalidate_freq
контролирует, как часто скрипт проверяется на наличие изменений (в зависимости от того, была ли изменена его временная метка). Таким образом, если временная метка скрипта остается такой же, как в последний раз, когда он был скомпилирован, она не будет перекомпилирована. Все это предполагает, что вы не изменилиopcache.validate_timestamps
настройку, которая включена по умолчанию.С PHP 5.6 на Amazon Linux (должно быть то же самое на RedHat или CentOS):
а затем перезапустите Apache.
источник
Я сталкивался с этим при настройке Moodle. Я добавил следующие строки в файл php.ini.
intl -> http://php.net/manual/en/book.intl.php
источник
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146