Детальный обзор Zend Opcache


Рекламные ссылки:

Категория: PHP fmp // Оставить отзыв

. NEWSGG.RU — Как известно, PHP в процессе выполнения скрипта сначала интерпретирует скрипт, компилирует в байт-код, а затем уже Zend Engine выполняет этот байт-код. Так вот, как раз большая часть производительности терялась за счет того, что каждый раз нужно было интерпретировать скрипт и компилировать в байт-код.

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

  • APC (APCu для php-fpm)
  • XCache
  • eAccelerator


В 2013 году было представлено расширение Zend Opcache (которое эволюционировало с Zend Optimizer) и было доступно как PECL-расширение для PHP 5.2+. Начиная с версии PHP 5.5+ это расширение доступно "из коробки" и по умолчанию включен. По данным тестов Zend Opcahe является продуктивным остальных Кешер, или еще так называемых PHP акселераторов.

Что же, рассмотрим все настройки данного расширения. Их можно прописать в файле настроек расширения - opcache.ini, или в главном файле настроек - php.ini.



opcache.enable

Булево значение (0 или 1, On или Off, true или false (далее буду применять 0 или 1)). Значение по умолчанию - "1".
Включить или отключить Zend Opcache. При отключении расширении код не будет оптимизироваться и кэшироваться.



opcache.enable_cli

Булево значение. Значение по умолчанию - "0".
Включить или отключить Zend Opcache в режиме CLI (Command Line Interface) - командной строки.
То есть, этой опцией вы задаете, будет использоваться Opcache при выполнении скриптов через интерфейс командной строки, например:
php script.php



opcache.memory_consumption

Целочисленное значение. Значение по умолчанию - "64".
Объем памяти, который выделяется под кэш, в мегабайтах.

opcache.interned_strings_buffer
Целочисленное значение. Значение по умолчанию - "4".
Объем памяти, который выделяется под так называемый пул строк, в мегабайтах.

Что же это такое? Допустим, в вашем коде 100 раз используется строковое значение "foo". Это может быть название переменной, строковое значение, название функции, название класса, текст встречается в комментарии и тому подобное. Opcache создаст одну внутреннюю переменную в распределенной памяти для значения этой строки, а для остальных 99 присвоит указатель на эту переменную.

Стоит отметить, что эта внутренняя переменная будет "расшаренных" между всеми php-fpm процессами, а не только в пределах одного. Как следствие - уменьшение использования памяти и увеличения производительности, особенно для больших веб-приложений.

Что один специфический момент ... Если у вас активирована опция save_comments, то в этот пул будут обрабатываться комментарии. Поскольку это очень большие объемы текста, то пул может очень быстро заполниться. Имейте это в виду!

opcache.max_accelerated_files

Целочисленное значение. Значение по умолчанию - "2000".
Количество ключей (фактически, файлов) в хэш таблицы Opcache. Минимальное значение 200, максимальное 1000000 (для версии <5.5.6 - 100000).

Что такое ключ? Дело в том, что Opcache в качестве ключей в своей хеш-таблицы использует путь к файлу (path). Поскольку путь к одному и тому же файлу можно задать, как абсолютный, так и относительный (причем здесь куча вариантов), то у одного скрипта может быть несколько ключей.

Это вполне нормально, если в вашей статистике значение количества ключей больше, чем количества скриптов.
Но, конечно же, очень рекомедуется в своем коде в выражениях include, require и др указывать абсолютный путь.



opcache.max_wasted_percentage

Целочисленное значение. Значение по умолчанию - "5".
Процент так называемой "потерянной" памяти, при достижении которого, Opcache будет перезапущен.

Что же это такое? Дело в том, что Opcache один раз, при запуске, занимает выделенную ему память и в процессе своей работы не освобождает ее. Если им нужен данные уже не актуальны (например, оригинальный сценарий изменился и если validate_timestamps = 1), то они замечаются как невалидный, то есть, так сказать, относят к "потерянной памяти". А обновленный скрипт записывается в свободное пространство памяти.

Очень важный момент! Когда объем этой "потерянной" памяти достигнет заданных опцией max_wasted_percentage процентов и общая выделенная под Opcache память будет заполнена полностью, то только тогда Opcache будет полностью перезапущен (в том числе очищен кэш). Конечно же этого желательно не допускать.

Также, очень важно подобрать такое значение max_wasted_percentage, чтобы не возникло ситуации, когда кэш заполнен, но объем "потерянной" памяти не достиг указанного процента. Новые скрипт не будут кэшироваться, Opcache не сможет перезагрузиться. Поэтому, нужно подбирать значение memory_consumption такое, чтобы всегда выделенной памяти было немного больше чем нужно.

opcache.use_cwd
Булево значение. Значение по умолчанию - "1".
При использовании, то к ключу, который записывается в хеш-таблицу Opcache, будет добавлен путь к текущей директории скрипта. Эта опция позволяет избежать коллизий, но немного негативно влияет на производительность.

opcache.validate_timestamps
Булево значение. Значение по умолчанию - "1".

Если установлена, Opcache каждые X секунд (Х - это значение опции revalidate_freq) будет проверять, есть ли разница timestamp (отметки времени модификации файла) оригинального скрипта и им нужен *. Если они отличается, то скрипт перекешовуеться *.

Негативно влияет на производительность. Рекомедую при разработке включать, а на продакшене исключать.

opcache.revalidate_freq
Целочисленное значение. Значение по умолчанию - "2".
Указывает, через сколько секунд проверять timestamp им нужен * и оригинального скрипта. Будет проигнорировано, если выключенной опции validate_timestamps.



opcache.revalidate_path

Булево значение. Значение по умолчанию - "0".
Когда установлена, проверяет (резолвит) путь к файлу скрипта. Это может происходить потому, что в include можно задавать как относительный, так и абсолютный путь к файлу.



opcache.save_comments

Булево значение. Значение по умолчанию - "1".
Если не установлена, комментарии удаляются. Соответственно уменьшается размер им нужен * скриптов.
Эту опцию нужно активировать, если в ваших скриптах используются аннотации.



opcache.load_comments

Булево значение. Значение по умолчанию - "1".
Если не установлена, комментарии не загружаются из хранилища Opcache.
То есть, если опция save_comments = 1, но load_comments = 0, то комментарии НЕ БУДУТ загружаться из памяти.

opcache.fast_shutdown
Булево значение. Значение по умолчанию - "0".
Когда установлена, позволяет быстро завершать работу кэшированных скриптов.

Фактически, это обеспечивает быстрый механизм вызова деструкторов им нужен кода, чтобы скорее отправить ответ (response) и освободить php worker для следующего запроса (request).

opcache.enable_file_override
Булево значение. Значение по умолчанию - "0".
Когда установлена, Opcache будет перехватывать вызов функций file_exists () is_file () is_readable (), искать файл сначала у себя в кэше, а уже потом, если в кэше отсутствует, обращаться к файловой системе.

Положительно влияет на производительность. Нужно заметить, что возможный риск получить устаревшие данные, если опция validate_timestamps не активизирована.



opcache.optimization_level

Целочисленное значение. Значение по умолчанию - "0xffffffff".
Битовая маска уровня оптимизации.
Более подробно можно посмотреть в исходном коде.

opcache.inherited_hack
Булево значение. Значение по умолчанию - "1".
Позволяет избежать ошибок "can not redeclare class".
Эта опция игнорируется для PHP 5.3+.

opcache.dups_fix
Булево значение. Значение по умолчанию - "0".
Позволяет избежать ошибок "can not redeclare class".

opcache.blacklist_filename
Строковое значение. Значение по умолчанию - "".
Путь к текстовому файлу, где указано файлы будут проигновани Opcache.

Каждый файл нужно указывать с новой строки. Также, можно указывать по маске. К примеру:
/var/www/supersite.com/configuration.php
/var/www/the-best-website.com/*


opcache.max_file_size
Целочисленное значение. Значение по умолчанию - "0".

Позволяет задать максимальный размер файла (в байтах), который еще будет им нужен *.
"0" означает, что будут Opcache будет обрабатывать абсолютно все файлы.
Если размер файла превышает указанное значение, то такой файл будет проигнорирован Opcache.

opcache.consistency_checks
Целочисленное значение. Значение по умолчанию - "0".
Позволяет задать число Х, и таким образом Opcache будет вычислять контрольную сумму кэша через каждый X-й запрос.
Негативно влияет на производительность. Есть смысл включить эту опцию только при отладки.



opcache.force_restart_timeout

Целочисленное значение. Значение по умолчанию - "180".
Позволяет задать значение в секундах, через которые будет перезапущен Opcache, если в течение этого времени не было ни одного запроса к кэшу.

Opcache использует эту опцию, чтобы таким образом предупредить проблемы с php процессом. Если нет обращений к кэшу, то возможно, что процесс не отвечает, то есть "завис". И через заданное количество секунд процесс будет перезапущен.



opcache.error_log

Строковое значение. Значение по умолчанию - "".
Имя файла лога ошибок OPcache. Пустая строка означает логирования в "stderr".

opcache.log_verbosity_level
Целочисленное значение. Значение по умолчанию - "1".
Указывает уровень логирования ошибок. Значения от 0 до 4.
0 - роковые ошибки, 1 - ошибки, 2 - предупреждения, 4 - сообщение дебаггера.



opcache.preferred_memory_model

Строковое значение. Значение по умолчанию - "".
Позволяет задать, какой модели памяти предпочтительнее.

Возможные значения: mmap, shm, posix and win32. Чтобы система сама автоматически выбрала модель, нужно оставить значение этой опции пустым.



opcache.protect_memory

Булево значение. Значение по умолчанию - "0".
Позволяет защитить разрешение память от неожиданного записи во время выполнения скрипта.
Полезная только для внутреннего отладки.

opcache.restrict_api
Строковое значение. Значение по умолчанию - "".
Разрешает доступ к API Opcache PHP скриптам путь к которым содержит строку, заданный этой опцией.
Если оставить пустым, то доступ будет запрещен всем скриптам.

*Zend Opcache не только кэширует байт-код, но и предварительно проводит оптимизацию. Но для удобства используется термин "закэшованный".

Сохрани страницу для ДРУЗЕЙ в Вконтакте, Фейсбуке, Одноклассниках!


Обязательно посмотри также это:


Ваши комментарии:

Рейтинг: 5/10. Отзывы в категории: 10 | Оценок: 175. Рейтинг:        

Написать комментарий!

« Нажмите ОДИН раз! и потомчерез 10 секунд обновите страницу.

Анонс статьи для того, чтобы поделиться в социальные сети (кратко):

Детальный обзор Zend Opcache, фото

Как известно, PHP в процессе выполнения скрипта сначала интерпретирует скрипт, компилирует в байт-код, а затем уже Zend Engine выполняет этот байт-код. Так вот, как раз большая часть смотрите тут!

Ссылка: http://newsgg.ru/php-fpm/383-zend-opcache.html

Хочу подписаться на обновления сайта по E-mail: Подписаться (ссылка). Самые последние новости будут приходить к вам прямо на почту!

Добавлено сегодня:

Посмотри это:

Алтын текст песни (татарская) слова музыки
Битва экстрасенсов 278 серия 03.12.2016 ТНТ
Отель Элеон 9 серия 08.12.16 СТС
Барселона Реал Мадрид 03.11.16 смотреть онлайн трансляция Матч ТВ
Вжух кот мем оригинал
Отель элеон 7 серия 06.12.16 СТС новый сериал Элион
КВН высшая лига Кубок мэра Москвы 04.12.2016