PHP 5.5 було випущено, і він містить новий модуль кешування коду під назвою OPCache, але, здається, не існує жодної документації на нього.
Тож де документація на нього і як я можу використовувати OPcache?
PHP 5.5 було випущено, і він містить новий модуль кешування коду під назвою OPCache, але, здається, не існує жодної документації на нього.
Тож де документація на нього і як я можу використовувати OPcache?
Відповіді:
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
Застереження Я є автором цього проекту
Особливості:
Скріншоти:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-статус
Особливості:
Знімок екрана:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Особливості:
Знімок екрана:
Оскільки OPcache призначений для заміни модуля APC, запустити їх паралельно в PHP неможливо. Це добре для кешування PHP-коду, оскільки це не впливає на те, як ви пишете код.
Однак це означає, що якщо ви зараз використовуєте APC для зберігання інших даних (через apc_store()
функцію), ви не зможете це зробити, якщо ви вирішите використовувати OPCache.
Вам потрібно буде використовувати іншу бібліотеку, наприклад, APCu або Yac, які обидва зберігають дані у спільній пам'яті PHP, або переключитись на використання чогось схожого на запам’ятоване, яке зберігає дані в пам'яті в окремому процесі на PHP.
Також OPcache не має еквівалента вимірювача прогресу завантаження, присутнього в APC. Натомість слід скористатися ходом завантаження сесії .
Документацію для 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.
Я створив обширну основу з великою кількістю полів та методів перевірки та перелічень, щоб мати можливість спілкуватися зі своєю базою даних.
Без оскара
Під час використання цього скрипту без запуску, і я надсилаю 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):
yum install php56-opcache
а потім перезапустіть apache.
Я зіткнувся з цим під час налаштування настрою. Наступні рядки я додав у файл 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
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/isissue/146