Как известно акселераторы PHP призваны повысить производительность скриптов PHP за счет кеширования байт-кода.
Обычно выполнение скрипта происходит по схеме:
- Чтение файла скрипта
- Генерация байткода
- Выполнение кода
- Вывод результата
Если не использовать акселераторы php то генерация байткода происходит каждый раз когда вызывается скрипт и на это затрачивается часть времени.
И так если мы хотим немного ускорить наш сайт то ставим Zend OPcache (поддерживается в версиях PHP 5.2.x, 5.3.x, 5.4.x. а начиная с версии PHP 5.5 OPcache включен в официальный дистрибутив.).
Zend OPcache доступен в виде исходников на Github, либо в виде PECL дистрибутива.
И так установка на CentOS
Установка PECL
yum install php-pear
Пакеты по зависимостям
yum install php-devel gcc
Скачиваем с сайта пакет для установки
wget http://pecl.php.net/get/zendopcache-7.0.5.tgz
Установка Zend OPcache как пакет PECL
pecl install zendopcache-7.0.5.tgz
После установки добавляем строку zend_extension=/usr/lib64/php/modules/opcache.so в файл /etc/php.d/opcache.ini
echo "zend_extension=/usr/lib64/php/modules/opcache.so" > /etc/php.d/opcache.ini
По рекомендации разработчиков можно добавить данные настройки в файл /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
Перезапускаем Apache
Настроки Zend Opcache:
Параметр | Default | Описание |
---|---|---|
opcache.enable | 1 | Включение/выключение OPcache. В выключенном состоянии код не оптимизируется и не кешируется. |
opcache.enable_cli | 0 | Включение OPcache для CLI-версии 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 добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения колизий между файлами с одинаковым именем. Выключение этой функции увеличивает производительность, но может нарушить работу приложений. |
opcache.validate_timestamps | 1 | При отключенном параметре, появляется возможность обнуления OPcache вручную или перезапуском вебсервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах. |
opcache.revalidate_freq | 2 | Через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии. (“1” означает проверку с периодичностью раз в секунду для запроса, “0” — постоянная проверка) |
opcache.file_update_protection | 2 | Предотвращает кеширование файлов, которые были изменены меньше, чем в указанное время (в секундах). Эта возможность защищает не полностью обновленные файлы от кеширования. В случае мгновенного обновления всех файлов, для увеличения производительности установите параметр равный “0”. |
opcache.revalidate_path | 0 | Включение или отключение оптимизации поиска файлов в include_path. Если поиск файлов выключен и будет найден закешированный файл, используемый в include_path, файл не будет найден повторно. Таким образом, если файл с именем, попадающийся где-либо еще в include_path, он не будет найден. Включайте этот параметр только в случае, если это действительно принесет ожидаемый эффект ускорения. По умолчанию возможность отключена, т.е оптимизация активирована. |
opcache.save_comments | 1 | Если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. Отключение параметра может вызвать некорректную работу некоторых приложений или фреймворков |
opcache.load_comments | 1 | Если выключено, комментарии PHPDoc не будут загружаться из общей памяти. При включении вывода, комментарии будут сохранятся, но выводиться приложениями только в случае надобности. |
opcache.fast_shutdown | 0 | Если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода. Эта возможность не освобождает каждый используемый блок памяти, но позволяет работать Zend Engine Memory Manager. |
opcache.enable_file_override | 0 | При включении OPcache будет проверять наличие закешированного файла при вызовах file_exists(),is_file() и is_readable(). Это может увеличить скорость работы в приложениях, которые проверяют расширение и читабельность PHP-скриптов, но появляется риск вывода устаревших данных в случае отключения параметра opcache.validate_timestamps. |
opcache.optimization_level | 0xffffffff | Маска битности, в которой каждый бит включает или отключает в соответствующие проходы OPcache. |
opcache.inherited_hack | 1 | Включение этого хака в качестве рабочего окружения при ошибках. |
opcache.dups_fix | 0 | Включайте этот параметр только при появлении ошибок вида «Cannot redeclare class ... |
opcache.blacklist_filename | Месторасположение списка файлов, к которым запрещен доступ для OPcache (поддерживаются маски). Каждый такой файл является текстовым файлом, в котором хранятся имена файлов, которые не требуется кешировать.Формат файла предусматривает размещение каждого имени файла в отдельной строке. | |
opcache.max_file_size | 0 | Позволяет исключать большие файлы из кеширования. По умолчанию кешируются все файлы. |
opcache.consistency_checks | 0 | Проверять контрольную сумму кэша каждое N-ое количество запросов. По умолчанию параметр имеет значение равное нулю, что означает отключение проверки. Подсчет контрольной суммы снижает производительность, этот параметр следует включать только если требуется отладка. |
opcache.force_restart_timeout | 180 | Какое время ожидать (а секундах) перед запланированной перезагрузкой в случае недоступности кэша. |
opcache.error_log | Определение названия и местоположения лога ошибок OPcache. При пустом значении ошибки выводятся в консоль. | |
opcache.log_verbosity_level | 1 | Все ошибки OPcache отправлять в лог-файл лог-файл веб-сервера. По умолчанию, журналируются только критические ошибки (level 0) или обычные ошибки (level 1). Так же можно включить выводит предупреждений (level 2), информационных сообщений (level 3) или отладочную информацию (level 4). |
opcache.preferred_memory_model | Предпочитаемый бэк-энд общей памяти. Можно оставить пустым и позволить системе самой разобраться. | |
opcache.protect_memory | 0 | Защите общей памяти от несанкционированной записи во время выполнения скрипта. Полезно только для отладки. |
opcache.restrict_api | Разрешение вызова API-функций OPcache из PHP-скриптов, путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на всё. |
Для тестирования и мониторинга Zend OPcache есть несколько удобных интерфейсов.
Каждый из этих интерфейсов представляет собой небольшой PHP скрипт, который просто загружается на хост и открывается при помощи броузера.