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

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

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

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"

Также обратите внимание, что вы должны использовать


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 удаляются из кода, чтобы уменьшить размер оптимизированного кода. Отключение "Doc комментарии" может сломаться некоторые существующие приложения и рамки (например, Doctrine, ZF2, В PHPUnit)


Я собираюсь бросить свои два цента за то, что я использую opcache.

Я сделал обширную структуру с большим количеством полей и методов проверки и перечислений, чтобы иметь возможность разговаривать с моей базой данных.

без opcache

при использовании этого скрипта без opcache и я нажимаю 9000 запросов за 2,8 секунды на сервер apache, он выводится на 90-100% cpu в течение 70-80 секунд, пока он не догонит все запросы.

Total time taken: 76085 milliseconds(76 seconds)

С поддержкой opcache

С OPCache включен он работает на 25-30% cpu время около 25 секунд и никогда не проходит 25% использования процессора.

Total time taken: 26490 milliseconds(26 seconds)

Я сделал файл черного списка opcache, чтобы отключить кэширование всего, кроме фреймворка, который является статическим и не требует изменения функциональности. Я выбираю явно только для файлов framework, чтобы я мог развиваться, не беспокоясь о перезагрузка / проверка файлов кэша. Имея все кэшируется экономит секунду на общее количество запросов 25546 milliseconds

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


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

yum install php56-opcache

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


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