Php opcache



PHP версии 5.5 уже имеет встроенный движок кэширования — OpCache — который сохраняет в памяти прекомпилированный байт-код скрипта. Если вы знакомы с APC или XCache, вы уже имеете представление о том, как такие движки работают. Как каждый скрипт PHP компилируется во время выполнения, часть времени выполнения уходит на то, чтобы преобразовать понятный человеку код в код, который был бы понятен машине.

Движок кэширования байт-кода, OpCache, APC или XCache, делает это только один раз — во время первого исполнения конкретного файла PHP. После этого прекомпилированный скрипт сохраняется в памяти, что должно привести к повышению производительности ваших PHP-приложений.

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

1. Стоит ли вообще устанавливать OpCache? На какой прирост скорости я могу рассчитывать?


Конечно, это зависит от многих факторов. Если ваш сервер справляется с обработкой входящего трафика и время отклика у вас очень невелико, вероятно, вы не сочтете необходимым работать над увеличением производительности.

Но на большом сайте с большими объемами трафика даже небольшой прирост производительности будет весьма кстати.

Реализация OpCache позволит обрабатывать больше запросов в секунду и возвращать ответ быстрее, чем без движка кэширования байт-кода. Так как OpCache довольно прост в установке и конфигурировании, вся настройка не займет у вас много времени.

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

В результате их тестов после установки OpCache среднее время отклика сайта сократилось на 14%. Снижение времени отклика различных действий веб-приложений составило от 6% до 74%.

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

Если вам нужны будут еще источники, связанные с описанием работы OpCache, ознакомьтесь с материалами, приведенными на fideloper.com и massivescale.com. В обоих случаях тесты показали снижение времени отклика после установки OpCache на 50%.


2. Я уже использую кэширование с помощью APC. Стоит ли мне переходить на OpCache?

Я думаю, стоит. OpCache имеет ряд преимуществ перед APC.

Прежде всего, кэширование APC не будет работать с новейшими версиями PHP. PHP 5.5 он не поддерживает вовсе. Его не рекомендуют устанавливать на PHP 5.4 или, как было сообщено, такая конфигурация может привести к ошибкам выполнения, которые нарушат работу всего приложения.

Просто прочитайте эту статью Википедии по PHP-акселераторам или эту подборку материалов Stack Overflow, если хотите узнать об этом подробнее.

В то же время OpCache поставляется в комплекте с PHP 5.5, так что, безусловно, он нормально работает с этой версией. Как сказано в сопроводительной документации, он также может быть установлен в комбинации с более старыми версиями PHP — от 5.2 до 5.4.

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

Важно только помнить, что при переходе с APC на OpCache последний не работает как движок кэширования данных. Если вы уже реализовали APC, то можете использовать его функции apc_add() и apc_fetch(), которые будут служить в качестве интерфейса для службы кэширования данных.


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

Если вы планируете перейти с APC на OpCache, помните об этом ограничении. Имейте в виду, что если вы хотите сохранить функциональность APC на уровне пользователя, для этого существует специальный проект APCu.

3. Как проверить, на самом ли деле OpCache кэширует мои файлы?

Если вы уже установили и настроили OpCache, для вас может оказаться очень актуальной возможность контролировать, какие PHP-файлы фактически кэшируются. Сам кэш-движок работает в фоновом режиме, и он довольно понятен для пользователей или веб-разработчиков.

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

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

  • opcache-status Расмуса Лердорфа;
  • OpCacheGUI Петера Нордийка;
  • opcache-gui Эндрю Коллингтона.

В своих проектах я использую скрипт opcache-gui, который содержит весь нужный мне функционал. Чтобы проверить, что кэширует движок, просто просмотрите данные, приведенные на вкладке “Overview” страницы графического интерфейса opcache-gui.


Если в соответствующей строке указано, что использование памяти и значение количества переходов больше нуля, это означает, что OpCache кэширует код PHP, а кэшированные файлы используются для обработки запросов.

Чтобы увидеть перечень конкретных PHP файлов, которые кэшируются, просто перейдите к вкладке “File usage”. Просмотрите приведенный там список файлов, чтобы убедиться, что файлы ваших проектов кэшируются:

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

В принципе, движок OpCache должен быть вполне понятен для вас. Это означает, что вы можете встроить в ваше приложение любой нужный вам код (который совместим с используемой версией PHP) и OpCache должен справиться с ним без проблем.

Но это будет работать, только если конфигурация OpCache задана надлежащим образом. Неправильная конфигурация движка кэширования может поломать весь сайт.

Прежде всего, для каждого типового проекта вам следует установить значение true для опции opcache.use_cwd. Включение этого параметра означает, что движок OpCache будет просматривать полный путь к файлу и различать файлы с одинаковыми именами, но разными путями. Установка значения false приведет к конфликту между разными файлами с одинаковыми именами.

Существует также параметр, который важен для инструментов и фреймворков, использующих аннотации. Если вы работаете с Doctrine, Zend Framework 2 или PHP Unit, не забудьте установить значение true для opcache.load_comments и opcache.save_comments.


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

Если ваш проект базируется на каком-то одном конкретном фреймворке или веб-приложении, всегда стоит ознакомиться с документацией на предмет настроек конфигурации OpCache. Например, существуют специальные настройки для Moodle.

5. Я храню настройки конфигурации своих приложений в файле PHP. Могу ли я запретить его кэширование?

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

Если вы запретите их кэширование, то будете уверены, что каждое изменение, хранящееся в таком файле, будет отображаться в вашем приложении сразу же.

OpCache позволяет указать черный список файлов, содержащий все полные пути к файлам, которые не будут обрабатываться движком кэширования. После установки директивы opcache.blacklist_filename, просто добавьте список файлов, которые вы не хотите кэшировать.

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


6. Как я могу работать и со средой разработки, и с рабочей средой на одном сервере, где подключен OpCache?

Если ваш сервер работает с несколькими приложениями, вы можете настроить OpCache таким образом, чтобы он использовался только некоторыми из них. Разработка сайтов и тестирование являются примерами сред, для которых подключение кэширования байт-кода является нежелательным. Это может принести больше вреда, чем пользы.

К счастью, вы можете использовать функции OpCache для одного проекта и отключить его для другого, все на одном сервере. Для этого сначала нужно включить OpCache на глобальном уровне, установив в файле php.ini значение true для директивы opcache.enable.

Затем, если вы не хотите использовать кэширование байт-кода для одного из ваших проектов, просто отключите его, установив для той же директивы значение false с помощью функции ini_set().

Таким образом, сначала вы должны включить кэширование глобально, а затем вы можете отключить его для некоторых проектов «локально». Вы не можете сделать наоборот — включение кэширования с помощью ini_set () невозможно.

Установив значение false для opcache.enable в верхней части файла в вашем проекте, вы отключите кэширование для этого конкретного проекта, сохраняя его для всех прочих.

Заключение

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

Перевод статьи «Understanding OpCache» был подготовлен дружной командой проекта Сайтостроение от А до Я.

www.internet-technologies.ru


Zend OPcacheZend OPcache — это один из PHP акселераторов, который ускоряет выполнение PHP путем сохранения скомпилированного кода в памяти, что исключает постоянное выполнение стандартного PHP сценария при каждом обращении к коду. Такое кэширование и оптимизация работы PHP снижает нагрузку на ресурсы VPS сервера и улучшает его общую производительность. К тому же стоит упомянуть, что OPcache создан разработчиками PHP, что говорит о полной их совместимости и рекомендуется их совместное использование, особенно на последних версиях php.

Установка OPcache

Как говорилось ранее, использование необходимых репозиториев упрощает установку необходимого ПО. Для простой установки OPcache на Centos необходим установленный и подключенный репозиторий remi (рассказано здесь) и команда

yum install php-opcache


OPcache будет установлен в соответствии с версией PHP, используемой у вас на сервере.

Проверить подключен ли акселератор можно командой

php -v

Zend OPcache

Настройка OPcache

На Centos настройки OPcache содержатся в файле opcache.ini или 10-opcache.ini (в зависимости от версии Centos), который располагается в каталоге /etc/php.d

Для его редактирования воспользуемся командой

mcedit /etc/php.d/10-opcache.ini

или

mcedit /etc/php.d/opcache.ini

Для настройки найдите нижеприведенные директивы и проставьте в них указанные значения. Некоторые из них отключены – закомментированы, чтобы раскомментировать, удалите перед директивой знак «;». Данные параметры рекомендуются разработчиками как оптимальные для наилучшей производительности:

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

Теперь выходим из режима редактирования с сохранением файла. На этом с установкой и настройкой Zend OPcache можно закончить.

www.region-brand.ru

OPcache replaces APC


Because OPcache is designed to replace the APC module, it is not possible to run them in parallel in PHP. This is fine for caching PHP opcode as neither affects how you write code.

However it means that if you are currently using APC to store other data (through the apc_store() function) you will not be able to do that if you decide to use OPCache.

You will need to use another library such as either APCu or Yac which both store data in shared PHP memory, or switch to use something like memcached, which stores data in memory in a separate process to PHP.

Also, OPcache has no equivalent of the upload progress meter present in APC. Instead you should use the Session Upload Progress.

Settings for OPcache

The documentation for OPcache can be found here with all of the configuration options listed here. The recommended settings are:

; 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   

If you use any library or code that uses code annotations you must enable save comments:

opcache.save_comments=1 

If disabled, all PHPDoc comments are dropped from the code to reduce the size of the optimized code. Disabling «Doc Comments» may break some existing applications and frameworks (e.g. Doctrine, ZF2, PHPUnit)

stackoverflow.com

OPcache заменяет APC

Поскольку OPcache предназначен для замены модуля APC, невозможно запустить их параллельно в PHP. Это отлично подходит для кэширования PHP-кода, так как не влияет на то, как вы пишете код.

Однако это означает, что если вы используете APC для хранения других данных (через apc_store() ), вы не сможете это сделать, если решите использовать OPCache.

Вам нужно будет использовать другую библиотеку, такую ​​как APCu или Yac которые хранят данные в общей памяти PHP или переключаются на использование чего-то вроде memcached, который хранит данные в памяти в отдельном процессе для PHP.

Кроме того, OPcache не имеет эквивалента индикатора прогресса загрузки, присутствующего в APC. Вместо этого вы должны использовать Прогресс загрузки сеанса .

Настройки для OPcache

Документацию по OPcache можно найти here со всеми перечисленными here параметрами конфигурации. Рекомендуемые настройки:

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

code.i-harness.com

Установка OPcache используя PECL

После установки будет сообщен путь размещения, например, You should add «zend_extension=/usr/lib64/php/modules/opcache.so» to php.ini.

Установка OPcache используя yum

Добавим OPcache в конфигурацию PHP, например, создадим файл /etc/php.d/opcache.ini и внесем в него инструкции:

zend_extension=/usr/lib64/php/modules/opcache.so opcache.enable = 1 ;opcache.enable_cli = 1 opcache.memory_consumption = 128 opcache.max_file_size = 1M opcache.interned_strings_buffer = 8 opcache.max_accelerated_files = 7963 opcache.fast_shutdown = 1 ; Проверять изменение файла раз в 5 секунд opcache.revalidate_freq = 5 opcache.use_cwd = 1 

Перезапустим Apache:

Php opcache

Опции OPcache

  • opcache.enable (значение по умолчанию 1) — включение/выключение OPcache.
  • opcache.enable_cli (значение по умолчанию 0) — включение OPcache при вызове PHP из командной строки.
  • opcache.memory_consumption (значение по умолчанию 64) — размер используемой памяти (в мб.) для хранения прекомпилированного PHP-кода.
  • opcache.interned_strings_buffer (значение по умолчанию 4) — количество памяти для пула строк в мегабайтах.
  • opcache.max_accelerated_files (значение по умолчанию 2000) — максимальное количество ключей в хэш-таблице OPcache. Число должно быть простым и быть больше, чем те, что приведены в примере: 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793. Допустимы числа между 200 и 1000000.
  • opcache.max_wasted_percentage (значение по умолчанию 5) — максимальный процент замусоренной памяти для запланированного перезапуска.
  • opcache.use_cwd (значение по умолчанию 1) — при включении добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения колизий между файлами с одинаковым именем.
  • opcache.validate_timestamps (значение по умолчанию 1) — появляется возможность обнуления OPcache вручную или перезапуском веб-сервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах. Частота проверки управляется параметром opcache.revalidate_freq.
  • opcache.revalidate_freq (значение по умолчанию 2) — через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии, где 1 — проверка с периодичностью раз в секунду, 0 — постоянная проверка.
  • opcache.file_update_protection (значение по умолчанию 2) — предотвращает кэширование файлов, которые были изменены меньше, чем в указанное время (в секундах). Эта возможность защищает частично обновленные файлы от кэширования.
  • opcache.revalidate_path (значение по умолчанию 0) — включение или отключение оптимизации поиска файлов в include_path, если поиск файлов выключен и будет найден закэшированный файл, используемый в include_path, файл не будет найден повторно. Таким образом, если файл с именем, попадающийся где-либо еще в include_path, он не будет найден.
  • opcache.save_comments (значение по умолчанию 1) — если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. Не рекомендуется отключение этого параметра.
  • opcache.load_comments (значение по умолчанию 1) — если выключено, то комментарии PHPDoc не будут загружаться из общей памяти.
  • opcache.fast_shutdown (значение по умолчанию 0) — если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода.
  • opcache.enable_file_override (значение по умолчанию 0) — при включении OPcache будет проверять наличие закэшированного файла при вызовах file_exists(), is_file() и is_readable().
  • opcache.optimization_level (значение по умолчанию 0xffffffff) — битовая маска, в которой каждый бит включает или отключает в соответствующие проходы OPcache.
  • opcache.inherited_hack (значение по умолчанию 1) — включение этого хака при ошибках вида can’t redeclare class. По умолчанию возможность отключена, т.е оптимизация активирована. В PHP-5.3+ этот хак не требуется.
  • opcache.dups_fix (значение по умолчанию 0) — включайте при появлении ошибок вида Can’t redeclare class.
  • opcache.blacklist_filename — месторасположение списка файлов, к которым запрещен доступ для OPcache (поддерживаются маски). Каждый такой файл является текстовым файлом, в котором хранятся имена файлов, которые не требуется кэшировать, размещение имени каждого файла с отдельной строки. Имя файла может содержать полный путь, либо префикс.
  • opcache.max_file_size (значение по умолчанию 0) — позволяет исключать большие файлы из кэширования. По умолчанию кэшируются все файлы.
  • opcache.consistency_checks (значение по умолчанию 0) — проверять контрольную сумму кэша каждое N-ое количество запросов. По умолчанию параметр имеет значение 0, что отключает проверки. Подсчет контрольной суммы снижает производительность.
  • opcache.force_restart_timeout (значение по умолчанию 180) — время ожидания (в секундах) перед перезагрузкой в случае недоступности кэша. После истечение времени ожидания OPcache перезапускает процессы, которые были все это время заблокированы.
  • opcache.error_log — определение названия и местоположения лога ошибок OPcache. При пустом значении ошибки выводятся в консоль.
  • opcache.log_verbosity_level (значение по умолчанию 1) — все ошибки OPcache отправляет в лог-файл веб-сервера. По умолчанию логируются только критические ошибки (0) и обычные ошибки (1). Дополнительно можно включить предупреждения (2), информационные сообщения (3) или отладочную информацию (4).
  • opcache.preferred_memory_model — предпочитаемая модель общей памяти.
  • opcache.protect_memory (значение по умолчанию 0) — защита общей памяти от несанкционированной записи во время выполнения.
  • opcache.restrict_api (значение по умолчанию пустая строка) — разрешение вызова API-функций OPcache из PHP-скриптов, путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на все.

www.hostcms.ru

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, РНРипхЬ)

qaru.site

Determine your PHP method

You can run PHP in multiple ways. The last few years, PHP has evolved into new methods, ranging from CGI to FastCGI to mod_php and PHP-FPM. Flushing your Opcache depends on how you run PHP.

If you want a uniform way of flushing your Opcache, you can create a PHP file called flush_cache.php in your docroot with content like this.

<?php  opcache_reset();  ?>  

Every time you want to flush your Opcache, you can browse to that file and it’ll call opcache_reset(); for your entire Opcache. The next PHP request to your site will populate the cache again.

It’s important that you call that URL in the same way you would reach your website, either via a HTTP:// or HTTPS:// URL. Running php flush_cache.php at the command line won’t flush the cache of your running processes.

This can be part of your deployment process, where after each deploy you curl that particular URL.

If you want a server-side solution, check further.

PHP running as CGI or FastCGI

Flushing the Opcache on CGI or FastCGI PHP is super simple: it can’t be done.

Not because you can’t flush the cache, but because the cache is flushed on every request anyway. FastCGI starts a new php-cgi process on every request and does not have a parent PHP process to store the Opcache results in.

In fact, having Opcache running in a CGI or FastCGI model would hurt performance: on every request the Opcache is stored in the FastCGI process (default behaviour if the Opcache extension activated), but that cache is destroyed as soon as that process dies after finishing the request.

Storing the Opcache takes a few CPU cycles and is an effort that cannot be benefited from again later.

CGI or FastCGI is about the worst possible way to run your PHP code.

PHP running at the CLI

All PHP you run at the command line has no Opcache. It can be enabled, and PHP can attempt to store its Opcache in memory, but as soon as your CLI command ends, the cache is gone as well.

To clear the Opcache on CLI, just restart your PHP command. It’s usually as simple as CTRL+C to abort the command and start it again.

For the same reason as running PHP as CGI or FastCGI above, having Opcache enabled for CLI requests would hurt performance more than you would gain benefits from it.

Apache running as mod_php

If you run Apache, you can run PHP by embedding a module inside your Apache webserver. By default, PHP is executed as the same user your Apache webserver is running.

To flush the Opcache in a mod_php scenarion, you can either reload or restart your Apache webserver.

$ service httpd reload  $ apachectl graceful

A reload should be sufficient as it will clear the Opcache in PHP. A restart will also work, but is more invasive as it kills all active HTTP connections.

ma.ttias.be

Существующие акселераторы PHP

Для PHP версий 5.3, 5.4 актуальны следующие акселераторы:

  • APC — Alternative PHP Cache. Бесплатный и открытый opcode кэшер для PHP. Поддерживает PHP4 и PHP5, включая 5.3 и 5.4.
  • eAccelerator. Свободный открытый проект, выполняющий роли акселератора, оптимизатора и распаковщика. Поддерживает PHP4 и PHP5, включая 5.4
  • PhpExpress. Бесплатный ускоритель обработки php-скриптов на веб-сервере. Поддерживает PHP4 и PHP5, включая 5.3
  • XCache. Бесплатный. Поддерживает функции оптимизации скриптов, кэширования байткода. Поддерживает PHP4 и PHP5, включая 5.6
  • Zend OPcache. Обеспечивает более быстрое выполнение PHP кода операции через кэширование и оптимизации. Улучшает PHP производительность, сохраняя скомпилированные сценариев байт-кода в разделяемой памяти. Zend OPcache включен в PHP 5.5 по умолчанию. Как расширение PECL поддерживает версии 5.2, 5.3 и 5.4.

Если вы используете PHP 5.5, то в нем по-умолчанию идет Zend OPcache и ничего дополнительно ставить не нужно.
В сети полно тестов и сравнений различных акселераторов. Но в данной статье я не буду их приводить.

Какой кешер выбрать

Перелапатил интернет и понял, что в зависимости от версии PHP гуру рекомендуют следующее:

  • 5.3 — apc
  • 5.4 — ZendOpCache
  • 5.5 — ZendOpCache(по-умолчанию)

Но я везде использую ZendOpCache вне зависимости от версии PHP. Мой выбор основан на том, что он стоит по-умолчанию на PHP v5.5. А значит лучше других должен знать как оптимизировать работу PHP.

Как установить ZendOpCache на CentOS

Нельзя использовать несколько акселераторов одновременно. ZendOpCache конфликтует с другими акселераторами и/или наоборот, так что остальные акселераторы должны быть отключены.
VestaCP на CentOS по-умолчанию ставит (ставила) APC, удалите его если вы решили установить ZendOpCache на CentOS.

#yum remove php-pecl-apc

Установка ZendOpCache на php 5.4

#yum install php-pecl-zendopcache --enablerepo=remi 

Установка ZendOpCache на php 5.3

#yum install php-pecl-zendopcache

Проверим правильность установки ZendOpCache на CentOS

  # php -v  PHP 5.3.3 (cli) (built: Oct 30 2014 20:12:53)  Copyright (c) 1997-2010 The PHP Group  Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies   with Zend OPcache v7.0.4, Copyright (c) 1999-2014, by Zend Technologies    

Оптимальные настройки Zend OPcache

Проверьте свой файл конфигурации /etc/php.d/opcache.ini
По информации в сети нижеследующие настройки являются самыми оптимальными.

  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.memory_consumption задает использование памяти для расширения
opcache.interned_strings_buffer задает объем памяти для хранения интернированых строк, в мегабайтах
opcache.max_accelerated_files – максимальное количество скриптов в памяти
opcache.revalidate_freq — это валидация кэша в секундах, в интернете все рекомендуют значение 60, я же использую 2, но иногда рекомендуют ставить 0 (ноль), то есть постоянно проверять на изменения. К примеру в Joomla OPcache кеширует все файлы и будет отдавать кэш после сохранения файлов еще то время, которое в этой строке. То есть вы сохранили файл, но все равно в течении указанного времени будете видеть старую копию из кеша. Поэтому не жалуйтесь, что файлы не сохраняются, подождите выставленное вами время.
opcache.fast_shutdown определяет включено или выключено быстрое завершение последовательности ускоренного, кода, дает возможность использовать Zend Engine Memory Management
opcache.enable_cli включает OPcache в CLI-версии PHP.

Перезапуск web-сервера

Чтобы изменения вступили в силу нужно перезапустить вэбсервер:

# service httpd restart

Изменение скорости работы сайта после установки акселератора PHP

Блог на WordPress работал сервере с PHP 5.3 без каких-либо акселераторов. Страница генерировалась за 0,37 сек., потребление памяти составляло 37 МБ.
Php opcache
После установки акселератора Zend OPcache скорость генерации страницы снизилась до 0,22 сек, потребление памяти при этом составило 11 МБ.
Php opcache
Комментарии излишни. Использование PHP акселератора положительно сказывается на скорости работы сайта и снижает потребление памяти.

moonback.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.