Как использовать PHP OPCache?

Был выпущен PHP 5.5, в котором есть новый модуль кэширования кода под названием OPCache, но, похоже, для него нет никакой документации.

Так где же к нему документация и как использовать OPcache?


person Danack    schedule 20.06.2013    source источник
comment
blogs.oracle.com/opal/entry/using_php_5_5_s   -  person Funk Forty Niner    schedule 21.06.2013
comment
Документация: php.net/manual/en/book.opcache.php   -  person David Oliver    schedule 09.04.2014
comment
Жаль, что в документации НЕ говорится, как правильно скомпилировать / отключить opcache и как обойти autoconf исходного кода PHP 5.6.24+, чтобы PHP скомпилировался! :-(   -  person Filip OvertoneSinger Rydlo    schedule 20.09.2016
comment
@ Fred-ii- Есть много настроек, которые могут нуждаться в корректировке. Понимание того, как это работает, и выявление проблем на этапе стабилизации процесса выпуска PHP 5.5 очень поможет. ... Этот пост в блоге не очень полезен. Здесь не объясняется, как понять, как это работает, или как лучше всего настроить параметры :(   -  person icc97    schedule 17.03.2017


Ответы (5)


Установка

OpCache по умолчанию компилируется на PHP5.5 +. Однако по умолчанию он отключен. Чтобы начать использовать OpCache в PHP5.5 +, вам сначала нужно включить его. Для этого вам необходимо сделать следующее.

Добавьте в свой php.ini следующую строку:

zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)

Обратите внимание, что если путь содержит пробелы, вы должны заключить его в кавычки:

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

Также обратите внимание, что вам придется использовать директиву zend_extension вместо «нормальной» директивы extension, потому что она влияет на фактический движок Zend (то есть на то, что запускает PHP).

использование

В настоящее время вы можете использовать четыре функции:

opcache_get_configuration():

Возвращает массив, содержащий текущую используемую конфигурацию OpCache. Сюда входят все настройки ini, а также информация о версии и файлы из черного списка.

var_dump(opcache_get_configuration());

opcache_get_status():

Это вернет массив с информацией о текущем состоянии кеша. Эта информация будет включать такие вещи, как: состояние, в котором находится кеш (включен, перезапуск, заполнен и т. Д.), Использование памяти, попадания, промахи и еще некоторую полезную информацию. Он также будет содержать кешированные скрипты.

var_dump(opcache_get_status());

opcache_reset():

Сбрасывает весь кеш. Это означает, что все возможные кэшированные скрипты будут снова проанализированы при следующем посещении.

opcache_reset();

opcache_invalidate():

Делает недействительным конкретный кешированный скрипт. Это означает, что сценарий будет снова проанализирован при следующем посещении.

opcache_invalidate('/path/to/script/to/invalidate.php', true);

Обслуживание и отчеты

Есть несколько графических интерфейсов, которые помогают поддерживать OpCache и создавать полезные отчеты. Эти инструменты используют указанные выше функции.

OpCacheGUI

Отказ от ответственности Я являюсь автором этого проекта

Функции:

  • Статус OpCache
  • Конфигурация OpCache
  • Статистика OpCache
  • Сброс OpCache
  • Обзор кешированных скриптов
  • Аннулирование кешированных скриптов
  • Многоязычный
  • Поддержка мобильных устройств
  • Блестящие графики

Скриншоты:

status

cached-scripts

графики

mobilr

URL: https://github.com/PeeHaa/OpCacheGUI

opcache-status

Функции:

  • Статус OpCache
  • Конфигурация OpCache
  • Статистика OpCache
  • Обзор кешированных скриптов
  • Отдельный файл

Скриншот:

status

URL: https://github.com/rlerdorf/opcache-status

opcache-gui

Функции:

  • Статус OpCache
  • Конфигурация OpCache
  • Статистика OpCache
  • Сброс OpCache
  • Обзор кешированных скриптов
  • Аннулирование кешированных скриптов
  • Автоматическое обновление

Скриншот:

opcache-gui-overview

URL: https://github.com/amnuts/opcache-gui

person PeeHaa    schedule 25.06.2013
comment
Что-нибудь относительно PHP-CLI? Как это используется в CLI? При перезапуске FPM OPCache сбрасывается - влияет ли это также на OPCache CLI? Является ли OPCache CLI отдельным или он использует тот же пул кэша с FPM? Спасибо! - person Shahriyar Imanov; 25.02.2014
comment
OpCache был включен для меня по умолчанию в моей последней установке на ubuntu 14.04, apache 2.4.7, php 5.5.9. - person jstats; 20.05.2014
comment
привет, на вашем третьем снимке экрана cache_full неверно, я предполагаю, что это связано с кешированием всей страницы, не могли бы вы рассказать мне, как его включить? (сделай это правдой) - person brucekaushik; 25.09.2014
comment
Я ошибаюсь, это не для кеширования полной страницы, но это будет отображаться как истина, если память, которую использует кеш, заполнена. В любом случае спасибо! - person brucekaushik; 25.09.2014
comment
zend_extension = C: \ path \ to \ php_opcache.dll (win) - добавление этой строки в php.ini отлично работает. - person Kalidasan; 25.11.2015
comment
apaxhe не может найти zend_extension=C:\path\to\php_opcache.dll но файл есть, что случилось? - person davejal; 06.06.2017
comment
Обратите внимание, что если вы используете расширение Xdebug, оно ДОЛЖНО быть загружено ПОСЛЕ расширения OpCache. - person Yousha Aleayoub; 18.09.2017

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).

person Danack    schedule 20.06.2013
comment
Эту ссылку тоже нашел, но я знал, что ты копаешь еще немного ;-) - person Funk Forty Niner; 21.06.2013
comment
Я иду за бейджиком :) - person Danack; 21.06.2013
comment
Есть значок бирки? ;-) - person Funk Forty Niner; 21.06.2013
comment
Эти настройки рекомендуются для производственной среды, для разработки или и того, и другого? - person marcvangend; 26.08.2013
comment
Возможно, я неправильно понял, что такое opcache и для чего он используется, но я настроил и протестировал его с помощью скрипта состояния PeeHaa ниже. Все работает. Но я все еще задаю вопрос OP. Как это использовать? Это не для кеширования просмотров и прочего? - person isimmons; 10.10.2013
comment
@isimmons OPcache повышает производительность PHP, сохраняя байт-код предварительно скомпилированного скрипта в общей памяти, тем самым устраняя необходимость для PHP загружать и анализировать скрипты при каждом запросе. - person Danack; 10.10.2013
comment
Ага, только что понял это. Думал, стоит прокомментировать, потому что Google привел меня сюда, прежде чем я понял это. - person isimmons; 10.10.2013
comment
@marcvangend Хороший вопрос! Я думаю, что кеширование имеет смысл только в производственной среде, поэтому эти конфигурации, вероятно, являются производственными настройками. - person Sliq; 11.11.2013
comment
Может ли кто-нибудь объяснить, почему производительность рекомендуемых настроек хуже, чем по умолчанию, или когда они должны начать действовать? - person R.P; 04.12.2014
comment
opcache.save_comments=1 также должен быть установлен для Symfony2. - person COil; 07.07.2015
comment
Существует проблема, когда fast_shutdown вызывает ошибки сегментации (и, следовательно, 500 ошибок), которые означает, что вы можете установить его на 0, пока он не будет исправлен. - person GreenReaper; 02.08.2015
comment
Предупреждение: не включайте OPcache, если вы используете PHP в chroot jail (например, на общем хостинге) из-за проблемы безопасности № 69090: bugs.php.net/bug.php?id=69090 - person Levure; 06.09.2015
comment
Держите opcache.fast_shutdown=0, пока эта ошибка не будет исправлена: github.com/zendtech/ZendOptimizerPlus/issues/146 - person Yousha Aleayoub; 18.09.2017

Я собираюсь вложить свои два цента за то, что использую 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

Это значительно увеличивает количество данных / запросов, которые я могу обрабатывать в секунду, даже не вызывая у сервера проблем.

person Tschallacka    schedule 12.02.2015
comment
С включенным opcache означает, какую конфигурацию вы использовали для его настройки? Только включение его в ini-файле или требуется любая другая конфигурация? - person KillABug; 20.02.2015
comment
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-файле. Но это то, что я использовал. в основном вещи по умолчанию - person Tschallacka; 20.02.2015
comment
кстати, я запускаю это с memcache, выполняя 2100 запросов к базе данных, второй запускает скрипт, который я использую, в течение 150 микросекунд (около 1/6 миллисекунды) - person Tschallacka; 20.02.2015
comment
это поможет мне в дальнейшем, хотя я не использую memcache прямо сейчас, я считаю, что opcache может помочь на фронте PHP. Исправьте меня, если я ошибаюсь. - person KillABug; 23.02.2015
comment
Opcache кэширует файлы php в скомпилированном виде в памяти. Таким образом, у вас больше нет накладных расходов на чтение с диска, компиляцию и оптимизацию файлов парсером php. Memcache - это то, что вы можете использовать для хранения переменных между сессиями. Sayt, например, у пользователя есть скрипт обновления, который запрашивает те же параметры в течение 10 секунд, пока пользователь смотрит на экран. Вы можете использовать кэш памяти для однократной компиляции запроса, а затем продолжать запрашивать скомпилированный запрос из памяти, а не регенерировать его. - person Tschallacka; 23.02.2015
comment
Спасибо за приведенную выше информацию! Проверяет ли opcache каждый раз, обновляются ли файлы php? Я имею в виду, как он узнает, что файлы обновлены и их нужно перекомпилировать? - person KillABug; 23.02.2015
comment
это не так. opcache.revalidate_freq=60; определяет, как долго файл может храниться в памяти в секундах. когда время истекло, он перекомпилирует файл. - person Tschallacka; 23.02.2015
comment
Отличная информация !! Я буду добавлять комментарии, если я застряну в любом месте! :П - person KillABug; 23.02.2015
comment
Фактически, opcache.revalidate_freq контролирует, как часто сценарий проверяется на наличие изменений (в зависимости от того, изменилась ли его временная метка). Поэтому, если временная метка сценария остается такой же, как и при последней компиляции, она не будет перекомпилирована. Все это предполагает, что вы не изменили параметр opcache.validate_timestamps, который включен по умолчанию. - person jjlin; 12.08.2015
comment
Ах, спасибо, что прояснили это. Я предполагал, что будет такая грубая проверка - person Tschallacka; 12.08.2015
comment
@jjlin - Когда вы говорите, что он не будет перекомпилирован, вы имеете в виду, что он останется в памяти на неопределенный срок или до перезапуска PHP или веб-сервера? Во-вторых, если opcache.validate_timestamps включен по умолчанию, т.е.opcache.validate_timestamps=1, вы имеете в виду, что opcache.revalidate_freq проверяет только то, что метка времени менялась каждые 60 секунд? - person Motivated; 05.12.2020

С PHP 5.6 в Amazon Linux (должно быть таким же в RedHat или CentOS):

yum install php56-opcache

а затем перезапустите apache.

person Roger Dueck    schedule 03.03.2016

Я столкнулся с этим при настройке moodle. Я добавил следующие строки в файл php.ini.

zend_extension=C:\xampp\php\ext\php_opcache.dll

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487

; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps

extension=C:\xampp\php\ext\php_intl.dll

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

intl -> http://php.net/manual/en/book.intl.php < / а>

person Anoop Toffy    schedule 30.08.2015