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

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

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

 icc9716 мар. 2017 г., 23:09
@ Фред-II- "Существует множество настроек, которые могут потребоваться настроить. Понимание того, как это работает, и выявление проблем на этапе стабилизации процесса выпуска PHP 5.5 очень поможет ».... Это сообщение в блоге неочень полезно. Это неОбъясните, как понять, как это работает или как лучше настроить параметры :(
 Funk Forty Niner21 июн. 2013 г., 00:17
 David Oliver09 апр. 2014 г., 13:44
Документация:php.net/manual/en/book.opcache.php
 Filip OvertoneSinger Rydlo20 сент. 2016 г., 13:58
Жаль, что Документация НЕ говорит нам, как компилироватьopcache правильно / отключите его или не обойдите autoconf из PHP 5.6.24+ source, чтобы PHP компилировался! :-(

Ответы на вопрос(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Обзор кэшированных скриптовАннулирование кэшированных скриптовмногоязычныйПоддержка мобильных устройствБлестящие графики

Скриншоты:

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

opcache-статус

Особенности:

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

Скриншот:

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

opcache-гуй

Особенности:

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

Скриншот:

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

 AStopher20 нояб. 2015 г., 15:23
Тот'там действительно хороший графический интерфейс ..
 davejal06 июн. 2017 г., 16:44
апахе можетт найтиzend_extension=C:\path\to\php_opcache.dll Бух файл там, чтоS не так?
 jstats20 мая 2014 г., 04:41
OpCache был включен по умолчанию для меня в моей последней установке на Ubuntu 14.04, apache 2.4.7, php 5.5.9.
 brucekaushik25 сент. 2014 г., 17:29
Я ошибаюсь, это не для кэширования полной страницы, но оно будет отображаться как true, если память, используемая кешем, заполнена. В любом случае спасибо!
 Shahriyar Imanov25 февр. 2014 г., 14:00
Что-нибудь в отношении PHP-CLI? Как CLI использует это? Когда FPM перезапускается, OPCache сбрасывает - это также влияет на CLI 'с OPCache? Это CLI 's OPCache отдельно или он разделяет тот же пул кэша с FPM? Спасибо!
 brucekaushik25 сент. 2014 г., 16:58
Привет, на третьем скриншоте cache_full имеет значение false, я предполагаю, что он связан с полным кэшированием страниц. Не могли бы вы рассказать, как включить его? (сделай это правдой)
 kalidasan25 нояб. 2015 г., 06:35
zend_extension = C: \ path \ to \ php_opcache.dll (win) - Добавление этой строки в php.ini работает нормально.
 Yousha Aleayoub18 сент. 2017 г., 00:50
Обратите внимание, что если вы используетеXdebug расширение ДОЛЖНО быть загружено ПОСЛЕ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

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

 KillABug23 февр. 2015 г., 13:21
это поможет мне двигаться вперед, хотя я сейчас не использую memcache, я считаю, что opcache может помочь в PHP. Исправьте меня, если я ошибаюсь.
 jjlin12 авг. 2015 г., 20:12
На самом деле,opcache.revalidate_freq контролирует, как часто скрипт проверяется на наличие изменений (в зависимости от того, была ли изменена его временная метка). Так что если сценарийметка времени остается такой же, как в последний раз, когда она была скомпилирована, она выигралаперекомпилировать Все это предполагает, что у вас нетт изменилopcache.validate_timestamps настройка, которая включена по умолчанию.
 KillABug20 февр. 2015 г., 11:02
С "opcache включен " означает, какую конфигурацию вы использовали для настройки? Нужно только включить его в INI-файл или любую другую конфигурацию?
 KillABug23 февр. 2015 г., 14:33
Отличная информация! Я буду добавлять комментарии на случай, если я застряну в любой момент! :П
 Tschallacka20 февр. 2015 г., 11:31
Кстати, я запускаю это с помощью memcache, выполняю 2100 запросов к базе данных в секунду, запускаю сценарий, который я использую, в течение 150 микросекунд (около 1/6 миллисекунды)
 Tschallacka12 авг. 2015 г., 20:14
Ах, спасибо за разъяснение этого. Я предполагал, что будет такой элементарной проверки
 Tschallacka20 февр. 2015 г., 11:28
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-файл. Но это то, что я использовал. в основном вещи по умолчанию
 Tschallacka23 февр. 2015 г., 13:51
это нет.opcache.revalidate_freq=60; определяет, как долго файл может находиться в памяти в секундах. когда время истекло, он перекомпилирует файл.
 KillABug23 февр. 2015 г., 13:30
Спасибо за вышеупомянутую информацию! И проверяет ли opcache каждый раз, обновляются ли php-файлы? Я имею в виду, как узнать, какие файлы обновляются и нужно ли перекомпилировать?
 Tschallacka23 февр. 2015 г., 13:25
Opcache кэширует файлы php в скомпилированном виде в памяти. Так ты нене нужно читать с диска и компилировать оптимизация файлов парсером php. Memcache - это то, что вы можете использовать для хранения переменных между сессиями. Например, у пользователя есть скрипт обновления, который запрашивает те же параметры в течение 10 секунд, пока пользователь смотрит на экран. Вы можете использовать mem cache для однократной компиляции запроса, а затем продолжать запрашивать скомпилированный запрос из памяти, а не восстанавливать его.

Я сталкивался с этим при настройке 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

 Yousha Aleayoub18 сент. 2017 г., 00:55
 sierrasdetandil02 мар. 2016 г., 17:31
Стоит отметить, что эти настройки описаны здесь:docs.moodle.org/30/en/OPcache
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)

 Sliq11 нояб. 2013 г., 12:01
@marcvangend Хороший вопрос! Я думаю, что кэширование имеет только реальный смысл в производстве, поэтому эти конфигурации, вероятно, являются производственными настройками.
 Danack10 окт. 2013 г., 17:20
@isimmons "OPcache повышает производительность PHP, сохраняя байт-код предварительно скомпилированного скрипта в общей памяти, тем самым устраняя необходимость в PHP загружать и анализировать скрипты при каждом запросе ».
 Funk Forty Niner21 июн. 2013 г., 00:22
Там'тег "значок»? ;-)
 isimmons10 окт. 2013 г., 17:10
Возможно, с моей стороны возникло недоразумение, что такое opcache и для чего он используется, но я настроил его и протестировал с помощью сценария состояния PeeHaa, приведенного ниже. Все работает. Но я'Я все еще задаю вопрос ОП. "Как это использовать?" Это'не для кеширования взглядов и прочего?
 GreenReaper02 авг. 2015 г., 15:42
Естьпроблема где fast_shutdown вызывает ошибки сегментации (и, следовательно, 500 ошибок), что означает, что вы можете установить его в 0, пока он не будет исправлен.
 Danack21 июн. 2013 г., 00:21
собираюсь за тег значок :)
 Yousha Aleayoub18 сент. 2017 г., 00:52
Держатьopcache.fast_shutdown=0 пока эта ошибка не исправлена:github.com/zendtech/ZendOptimizerPlus/issues/146
 COil07 июл. 2015 г., 12:39
opcache.save_comments=1 также должен быть установлен для Symfony2.
 R.P04 дек. 2014 г., 19:00
Может кто-нибудь объяснить, почему производительность рекомендуемых настроек хуже, чем настройки по умолчанию, или когда они должны начать действовать?
 isimmons10 окт. 2013 г., 17:22
Да, просто понял это. Думал так'Стоит комментарий, потому что Google привел меня сюда, прежде чем я понял это.
 bouchon06 сент. 2015 г., 18:52
Предупреждение: неt включите OPcache, если вы используете PHP в chroot-тюрьме (например, на общем хостинге) из-запроблема безопасности # 69090:bugs.php.net/bug.php?id=69090
 marcvangend26 авг. 2013 г., 11:15
Это рекомендуемые настройки для производственных сред, для разработки или для обоих?
 Funk Forty Niner21 июн. 2013 г., 00:18
Нашел и эту ссылку, но я знал тебябуду копать немного больше ;-)
 user13340816 окт. 2013 г., 20:58
+1 для выделенияopcache.save_comments часть

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

yum install php56-opcache

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

 Yousha Aleayoub18 сент. 2017 г., 00:54
Также вам нужно отредактироватьphp.ini...

Ваш ответ на вопрос