Настройка Opcache для кеширования скриптов, подтягиваем скорость

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

Причина думаю в том, что каждый хостинг или сервер имеет свои границы мощности, включая и оперативную память и iops жесткого диска и процессорную мощность. Но в общем решил постепенно разбираться и публиковать некоторые советы. Поэтому первая статья этого цикла посвящена настройке opcashe который создаёт кешированный пул php запросов, что актуально сегодня.

Что делает OPCACHE и для чего он

Opcashe применяется для создания опкодов. Опкодом называется результат компиляции файлов php. То есть выглядит это так:

  • Php компилирует файлы, которые необходимы по запросу
  • При компиляции извлекаются опкоды
  • После выполнения операции опкоды ликвидируются
  • Операция каждый раз повторяется

А если применить Opcashe на сервере то происходить это будет так

  • Php компилирует файлы, которые необходимы по запросу
  • При компиляции извлекаются опкоды, которые попадают в кеш opcashe
  • После выполнения операции опкоды остаются
  • Снижается время на запуск каждого скрипта

Отмечается во многих источниках, что снижается потраченное время на запуск скриптов php от 2 до 3 раз. Если учесть, что сейчас в сайтах все больше сложных скриптов, то тем более это важно. Есть даже мнение, что продолжительность временных затрат на запуск скриптов в cms системах может снизиться до 10 раз, за счет того, что целый блок операций, идущих друг за другом в данном случае снижают время выполнения за счет имеющегося опкода в кеше.

Как настроить и установить Opcache

Я рассмотрю основные моменты для установки и запуска этого кеширования на любом vps или выделенном сервере с установленной ISP manager, так как другими просто не пользуюсь. Но думаю имея навык для работы с другими панелями, вы можете также это php расширение установить. Для установки и включения заходим в работающую у нас версию php, если вы работаете на нескольких php, например 5.6 и php 7 то настроить надо для каждой и включаете это расширение.

Следующий этап самый важный, это отрегулировать и настроить использование этого кеша, так как идущие по умолчанию настройки могут не охватывать необходимый вам объём опкоде кеширования. Так например я при первом начале регулировки увидел, что у меня охвачено не более 14% скриптов этим кешированием, в ходе уже дальнейших несложных настроек смог довести до 88-90%. Конечно это снизило затраты производительности и улучшило скорость работы.

Для начала регулировки скачайте этот файл и назовите его opcashe.php после чего залейте в корень любого вашего сайта на vps или сервере. Скачать файл.

Затем запустите просмотр этого php файла и гляньте что у вас указано в настройках: opcache_hit_rate — процент использования opcashe и по использованию кеша исходя из оперативной памяти.

Настройка opcache для кеширования скриптов, подтягиваем скорость

По умолчанию стоит количество 64 мегабайта оперативной памяти, что мне явно не хватало. Я после настроек сделал 1024 мегабайт, хотя думаю могло бы хватить даже 786, но памяти на серверах хватает, поэтому с запасом. В принципе по запущенному скрипту вы сможете сразу увидеть, сколько памяти занято, сколько свободно и пройдя в настройки php увеличить несколько параметров, которые вы видите на картинке ниже.

Настройка opcache для кеширования скриптов, подтягиваем скорость

Основные настройки OPCACHE

Проверить настройки Opcashe можно разными способами. Если у вас ISP то легче всего зайти в настройки PHP и там вы увидите настройки, смотрим картинку ниже. Если у вас нет подключения нескольких php то файл конфигурации обычно располагается в /etc/php.d/opcache.ini. В настройках как правило основное что меняется, это несколько важных параметров.

opcache.memory_consumption=128 (количество оперативной памяти для opcashe, стоит по умолчанию 64, стоит пробовать и тестировать, до достижения оптимальных результатов)
opcache.interned_strings_buffer=8 (количество памяти для хранения строк в мегабайтах)
opcache.max_accelerated_files=4000 (количество скриптов, которые могут храниться в памяти opcashe, по умолчанию 2000)
opcache.revalidate_freq=60 (время в секундах для проверки валидации скриптов из памяти opcashe, некоторые ставят 5-10)
opcache.fast_shutdown=1 (включает или отключает возможность быстрого окончания последовательности ускоренного кода, добавляет вариант для работы Zend Engine Memory Management)
opcache.enable_cli=1 (включает или отключает работу Opcashe в CLI-версии PHP)

Весь список настроек 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-скриптов, путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на все.

Добавлю код самого opcache.php который вам поможет получать информацию о работе кеша.

 

Выводы и итоги

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

В сравнении с более ранними расширениями кеширования opcashe является более удобным, тем более он вышел буквально несколько лет назад, но есть ограничение, что он поддерживает php только с 5.5 версии. Поэтому если у вас более ранняя версия php вполне желательно перейти на новую, тем более есть даже в самом переходе значительный ресурс скорости работы сайта.

2 КОММЕНТАРИИ

  1. имы для исполнения скриптов, в опкоды. Опкоды являются низкоуровневым представлением скрипта, что позволяет их быстрее выполнять. OPCACHE сохраняет эти опкоды в памяти сервера, чтобы при следующих запросах к тому же скрипту не нужно было повторно компилировать их. В результате этого повышается производительность сервера и ускоряется загрузка страниц.

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

    Вопрос к автору статьи: Какие наиболее важные параметры настройки OPCACHE нужно учитывать при работе с виртуальным сервером и физическим сервером? Есть ли настройки, которые можно сделать универсальными для всех типов серверов?

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь

16 − 7 =

OK2WEB
OK2WEB
Более 12 лет занимаюсь разработкой и продвижением сайтов. Городские порталы, информационные и новостные сайты. Сейчас в основном разрабатываю интернет магазины и коммерческие сайты. Если у вас есть вопросы пишите, стараюсь оперативно ответить и помочь.

Как избавиться от нагрузка на сервере или хостинге сайта, в nginx убираем вредных ботов

Итак сегодняшняя тема статьи это вопрос нагрузки которая возникает на сайте. Недавно мне пришлось столкнуться с этим. На большом мощном сервере просто висело порядка 22 LA в htop и никаким образом не было видно каких экстремальных посещаемостей. Это надо было устранять и начал ковыряться...

Добавление к товарам Woocommerce покупки по запросу для нулевых цен

Редко но возникает ситуация когда необходимо для части товаров выставить цену по запросу на товары. Я не сторонник такого подхода, но объективно иногда это необходимо и поэтому потребовалось простое решение, которое позволит такое реализовать. Покопался поискал и нашёл добавил на сайт сниппет, который позволяет...

Решение ошибки: WordPress database error Duplicate entry ‘0’ for key ‘wp_posts.PRIMARY’ for query INSERT INTO `wp_posts`

Делал сайт и столкнулся с такой ошибкой. Почитал, поискал, никто не дает решения. Ошибка проявляет себя так, что при добавлении записи на сайте Wordpress у вас нет интерфейса для добавления статьи и по сути исчезает возможность добавлять статьи. Решение оказалось простым. Зашел в базу данных...

Справочник по Fastpanel вопросы и ответы (обновляется)

Fastpanel - это веб-панель управления для хостинга и управления виртуальными серверами. Эта панель предоставляет администраторам серверов и владельцам веб-сайтов набор инструментов для упрощения управления серверами, приложениями и веб-сайтами. Вот основные возможности и предназначение Fastpanel: Управление серверами: Fastpanel позволяет администраторам легко создавать, настраивать и удалять...

Вывод товаров случайным образом — полезные сниппеты Woocommerce

К существующим вариантам вывода товаров по дате, цене, рейтингу добавляем возможность вывода в случайном порядке. Также просто сниппет для Woocommerce, вставлять в файл function темы либо через плагин вставки кода. При необходимости можете поменять текст отображения вывода.

Вывод похожих товаров по атрибуту — полезные сниппеты Woocommerce

По умолчанию Woocommerce товары выводятся в виде похожих из товаров в категории. Это неудобно, так как не позволяют вывести в каталоге товаров правильно похожие. Решаем задачу просто с помощью сниппета. Вставляем в function.php или в место для кода вот такой сниппет: В данном варианте выведен...