«Битрикс24». Играемся с настройками и оптимизируем проект
В этой статье мы расскажем, как оптимизировать крупный проект в «Битрикс24» и увеличить его производительность в 3 раза, изменяя настройки MySQL и режим питания CPU.
300 Гб файлов и
80 Гб БД на выделенном сервере с BitrixVM.
До изменения настроек показатели были следующими:

Стандартный тест производительности в панели администратора «Битрикс»
Из всех параметров стоит обратить особое внимание на работу с MySQL и «Конфигурацию PHP». Именно эти показатели особенно важны для нас, так как они косвенно отражают уровень производительности проекта.
Запрос клиента
Наш клиент хотел не только перенести проект на новый выделенный сервер, но и улучшить параметры производительности. Например, среди сложностей можно назвать отсутствие возможности делать дампы базы данных на исходном сервере, а также медленную работа самого портала.
Решение
Настройки MySQL — первое, с чем мы начинаем работать.
Заменим стандартные значения BitrixVM на:
Следующий шаг — изменим режим питания CPU, так как «Битрикс» любит большую частоту процессора.
В зависимости от количества ядер меняем в каждом
файле /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor powersave на performance.
Далее проверим результат:

Мы видим, что больше всего изменилась работа с MySQL: параметры “запись” и “изменение” выросли почти в 3 раза; показатель “чтение” вырос в 5 раз. Это значит, что при обращении сайта к базе данных этот тип операции будет выполняться в несколько раз быстрее. Как следствие, вырастет и общая производительность сайта.
Из-за изменения режима питания CPU (это возможно, так как используется выделенный сервер) увеличилось количество операций на CPU.
Теперь необходимо отредактировать настройки для OPcache.
В файле /etc/php.d/10-opcache.ini заменяем его исходное значение на:
Примечание: Тест «Битрикс» сообщит вам, что параметр opcache.revalidate_freq должен иметь значение 0 а не 1, но с указанным нами он будет работать лучше.
Сам параметр opcache.revalidate_freq отвечает за проверку кеша: при значении 0 она выполняется каждый раз при запуске скрипта, а при значении 1 — раз в секунду.
После изменения настроек проверяем результат:

Из таблицы следует, что показатель работы с MySQL еще немного вырос. В то же время операции на CPU и общая производительность «Битрикс» увеличились значительно за счет изменения настроек PHP и кеширования скриптов.
Вывод
Благодаря таким несложным изменениям в настройках, мы смогли увеличить производительность проекта в 3 раза, а взаимодействие с БД — от 3 до 5 раз (на основании общей оценки теста «Битрикс»). Работой проекта на новом сервере наш клиент полностью доволен. We did it!
В данном способе оптимизации мы сделали акцент на основных моментах, с которыми взаимодействует «Битрикс», а также на сам тест. Клиенты часто обращают внимание именно на него.
Среди других способов повышения производительности «Битрикс» можно назвать установку и настройку кеширующего сервиса (например, Redis). Показатель производительности в CMS может упасть, но общая работа сайта должна быть лучше. Кроме того, можно использовать php-fpm, но в нашем случае переделывать ОС, изначально настроенную под «Битрикс», было бы нерационально.
Также можно еще поиграться с настройками MySQL. Они индивидуальны для каждого проекта и конфигурации, поэтому единого идеального рецепта не существует. Будет интересно узнать ваши лайфхаки по оптимизации проектов в «Битрикс». Делитесь мнением в комментариях.
Opcache revalidate freq битрикс как изменить
Курс предназначен для организаций, предоставляющих услуги хостинга и желающих получить компетенцию Рекомендуемый хостинг.
В курсе рассматриваются требования платформы Bitrix Framework к хостингу, вопросы установки, настройки продукта а также вопросы инструментов и методов оптимизации серверов и баз данных для работы с системой
Для хостеров не является обязательным, но рекомендуется изучение курсов Контент-менеджер и Администратор. Базовый для получения более полного представления о возможностях системы и способах работы с ней.
Рекомендуется ознакомиться с опытом настройки и тестирования серверов в блоге Дениса Шаромова, а так же с отзывами клиентов о хостингах в группе Черный и белый список хостингов социальной сети компании "1С-Битрикс".
Если ваш хостинг на Windows, то вам может быть полезна группа 1С-Битрикс на платформе Windows Server 2008 в социальной сети сайта "1С-Битрикс". В ней пользователи делятся опытом работы системы на IIS 7.
Тесты и сертификат
После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче линейки тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
Также Вы можете поделиться ссылкой на страницу со своими сертификатами. Для этого на странице Моё обучение отметьте опцию Разрешить публичный доступ к резюме студента
и скопируйте ссылку на страницу резюме
. Страница с Вашим резюме будет доступна всем, кому Вы отправите ссылку на неё.
Комментарии к урокам
| На каждой странице курса авторизованный на сайте посетитель может дать комментарий к содержимому страницы. Комментарий — не форум, там не ведётся обсуждений или разъяснений. Это инструмент для сообщений нам об ошибках, неточностях. Для отправки комментария воспользуйтесь расположенной в правом нижнем углу окна браузера кнопкой: | ![]() |
У нас часто спрашивают, сколько нужно заплатить
Курс полностью бесплатен. Изучение курса, прохождение итоговых тестов и получение сертификатов — ничего из этого оплачивать не нужно.
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:
уроке.
Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат — это если общее число набранных Вами баллов отличается от максимального на 1-2%.
Скачать материалы курса в формате EPUB. Файлы формата EPUB Чем открыть файл на
Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
Linux:
Calibre
FBReader
Cool Reader
Okular обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса. Версия файла от 10.02.2023.
Настройка параметров PHP
На VPS-сервере PHP по умолчанию работает в режиме mod_php. Также Вы можете подключить режим mod_cgi по этой инструкции. В режиме mod_php PHP работает как модуль Apache. Для настройки PHP вносятся изменения в файл .htaccess.
В режиме mod_cgi запускается интерпретатор php-cgi. Для настройки PHP вносятся изменения в файл .php.ini. в каталоге сайта cgi-bin.
Настройка параметров в файле .htaccess
Все директивы необходимо добавлять в самом начале или в самом конце файла. Не добавляйте директивы между блоками кода <IfModule>. </IfModule>.
apc.cache_by_default
apc увеличивает производительность за счет кэширования. Также иногда требуется отключить акселератор apc, например, при переполнении кэша.
Для включения акселератора apc выполните команду:
Для отключения apc выполните команду:
default_charset
Директива default_charset задает кодировку по умолчанию для всех выдаваемых страниц. Например, utf-8, cp1251, koi8-r.
Для добавления директивы введите:
display_errors
Директива display_errors позволяет скрыть или выводить на экран ошибки.
Для включения вывода ошибок введите:
Для отключения вывода ошибок введите:
log_errors
Директива log_errors включает запись ошибок php и их сохранение в заданный пользователем файл.
Для включения директивы введите:
Где user – имя пользователя, u – первая буква имени пользователя.
magic_quotes_gpc
Опция magic_quotes_gpc (волшебные кавычки) включает экранирование данных PHP-скрипта. При этом обратный слэш (\), одинарные (‘) и двойные кавычки («) автоматически экранируются.
Для включения magic_quotes_gpc введите:
Для отключения magic_quotes_gpc введите:
mail.add_x_header
Опция mail.add_x_header включает логирование отправки почты из скриптов сайта. В логах содержится путь до скрпипта, адрес получатели и заголовки.
Для включения mail.add_x_header введите:
Где user – имя пользователя, u – первая буква имени пользователя.
max_input_vars
Директива max_input_vars задает максимальное количество входных переменных, которое может быть принято в одном запросе.
Например, если максимальное количество входных переменных 9000, введите:
mbstring.func_overload, mbstring.internal_encoding
Как правило, директивы mbstring.func_overload и mbstring.internal_encoding используются для оптимизации работы сайтов на CMS Битрикс. Для данной CMS введите:
Для других CMS рекомендуется использовать такие значения:
opcache.revalidate_freq
Настройка opcache.revalidate_freq необходима для CMS Битрикс. Чтобы отключить опцию введите:
pcre.recursion_limit
Данная директива позволяет установить лимит на рекурсию.
post_max_size
Директива post_max_size устанавливает максимальный объем данных, отправляемых методом POST:
Для загрузки больших файлов значение post_max_size должно быть больше upload_max_filesize.
register_globals
Директива register_globals используется для управления глобальными переменными.
Для включения глобальных переменных введите:
Для отключения глобальных переменных введите:
request_order
Директива request_order устанавливает очередность добавления переменных Cookie, POST и GET в массив _REQUEST:
upload_max_filesize
Данная директива позволяет установить максимальный размер закачиваемого файла.
Настройка опций в файле php.ini
allow_url_fopen
Опция allow_url_fopen включает URL wrappers (поддержку оберток URL). Это позволяет работать с объектами URL через ftp/http как с обычными файлами.
Для включения allow_url_fopen введите:
Для отключения allow_url_fopen введите:
apc.cache_by_default
apc увеличивает производительность за счет кэширования. Также иногда требуется отключить акселератор apc, например, при переполнении кэша.
Для включения акселератора apc выполните команду:
Для отключения apc выполните команду:
default_charset
Директива default_charset задает кодировку по умолчанию для всех выдаваемых страниц. Например, utf-8, cp1251, koi8-r.
Для добавления директивы введите:
display_errors
Директива display_errors позволяет скрыть или выводить на экран ошибки.
Для включения вывода ошибок введите:
Для отключения вывода ошибок введите:
magic_quotes_gpc
Опция magic_quotes_gpc (волшебные кавычки) включает экранирование данных PHP-скрипта. При этом обратный слэш (\), одинарные (‘) и двойные кавычки («) автоматически экранируются.
Для включения magic_quotes_gpc введите:
Для отключения magic_quotes_gpc введите:
mail.add_x_header
Опция mail.add_x_header включает логирование отправки почты из скриптов сайта. В логах содержится путь до скрпипта, адрес получатели и заголовки.
Для включения mail.add_x_header введите:
Где user – имя пользователя, u – первая буква имени пользователя.
max_input_vars
Директива max_input_vars задает максимальное количество входных переменных, которое может быть принято в одном запросе.
Например, если максимальное количество входных переменных 9000, введите:
mbstring.func_overload и mbstring.internal_encoding
Как правило директивы mbstring.func_overload и mbstring.internal_encoding используются для оптимизации работы сайтов на CMS Битрикс. Для данной CMS введите:
Для других CMS рекомендуется использовать такие значения:
opcache.revalidate_freq
Настройка opcache.revalidate_freq необходима для CMS Битрикс. Чтобы отключить опцию введите:
pcre.recursion_limit
Данная директива позволяет установить лимит на рекурсию.
post_max_size
Директива post_max_size устанавливает максимальный объем данных, отправляемых методом POST:
post_max_size = 100M
php_value post_max_size 100M
Для загрузки больших файлов значение post_max_size должно быть больше upload_max_filesize.
register_globals
Директива register_globals используется для управления глобальными переменными.
Для включения глобальных переменных введите:
Для отключения глобальных переменных введите:
request_order
Директива request_order устанавливает очередность добавления переменных Cookie, POST и GET в массив _REQUEST:
upload_max_filesize
Данная директива позволяет установить максимальный размер закачиваемого файла.
Опции, которые не могут быть изменены
При использовании виртуального сервера нельзя изменить следующие настройки php:
Оптимизация Brainy под Битрикс
Как правило, если на VPS или выделенном сервере размещаются только сайты под управлением CMS Битрикс, то используется специализированное решение от самой Битрикс — «1С-Битрикс: Веб-окружение» — Linux (BitrixEnv). В этом случае каких-либо дополнительных действий по оптимизации не требуется.
Но, если необходимо разместить на той же машине сайты на других CMS, то данное окружение мало применимо. Выходом послужит использование одной из панелей управления, например бесплатной BrainyCP. Арендовать VPS сервер или выделенный сервер можно на нашем сайте.
1. Проверка типа таблиц
Проверим какой тип таблицы используется в базе данных. Сделаем это, подключившись к MySQL через утилиту phpmyadmin, далее выбрав нужную базу и нажав «Структура».

Если таблицы имеют тип InnoDB, то дальнейших действий не требуется.
Если же все или часть таблиц имеют тип MyISAM, то переведем их в InnoDB, поскольку в большинстве случаев они работают быстрее нежели MyISAM. Да и оптимизации MySQL под один тип таблиц проще.
Сначала обязательно сделаем дамп базы данных, на случай если что-то пойдет не так. Сделать это можно через тот же phpmyadmin, в разделе «Экспорт».

Для перевода таблиц в существующей базе можно воспользоваться следующим запросом через phpmyadmin
SET @DATABASE_NAME = ‘name_of_your_db’;
SELECT CONCAT(‘ALTER TABLE `’, table_name, ‘` ENGINE=InnoDB;’) AS sql_statements
FROM information_schema.tables AS tb
WHERE table_schema = @DATABASE_NAME
AND `ENGINE` = ‘MyISAM’
AND `TABLE_TYPE` = ‘BASE TABLE’
ORDER BY table_name DESC;
name_of_your_db заменяем на имя базы данных. Результатом выполнения данного запроса будет текст другого запроса, который нужно будет скопировать и выполнить для перевода таблиц из MyISAM в InnoDB.

В зависимости от количества таблиц в базе и их имен может потребоваться включить опцию «Полные тексты» и увеличить количество выводимых строк в phpmyadmin


2. Оптимизация настроек MySQL для InnoDB
Оптимизируем настройки MySQL под InnoDB, исходя из оперативной памяти VPS
Задать данные настройки можно, как через панель «База данных» — «Управление MySQL/MariaDB» — «Управления через пакетный менеджер» — кнопка «Настроить», так и через консоль, редактируя файл.
Важно! Перед редактированием данного файла, создадим резервную копию файла.
Проще всего сделать это консольной командой cp /etc/my.cnf /etc/my.cnf _back
А так же копию базы данных через дамп или целиком скопировав папку /var/lib/mysql
innodb_buffer_pool_size — Это очень важный параметр для настройки InnoDB. Обычно предполагается выделение 70-80% памяти для серверов, на которых ничего не запущено, кроме InnoDB. Если же на сервере будут запущены и другие процессы (php, Apache и т.д.), то размер лучше ограничить в 40-50% от объема оперативной памяти.
innodb_additional_mem_pool_size — Данная опция практически никак не влияет на производительность MySQL, однако рекомендуется оставлять для InnoDB около 20 МБ (или чуть больше) под различные внутренние нужды.
innodb_log_file_size — Эта опция влияет на скорость записи. Она устанавливает размер лога операций (так операции сначала записываются в лог, а потом применяются к данным на диске). Чем больше этот лог, тем быстрее будут работать записи (т.к. их поместится больше в файл лога). Но следует помнить, что увеличение этого параметра увеличит и время восстановления системы при сбоях. Обычно выставляют значение около 64-512 МБ в зависимости от размера сервера.
innodb_log_buffer_size — Стандартное значение данной опции вполне подойдёт для большинства систем со средним количеством операций записи и небольшими транзакциями. Если же в Вашей системе бывают всплески активности, или Вы активно работаете с BLOB-данными, то рекомендуется немного увеличить значение innodb_log_buffer_size. Однако не переусердствуйте — слишком большое значение будет пустой тратой памяти: буфер сбрасывается каждую секунду, поэтому Вам не понадобится больше места, чем требуется в течение этой секунды. Рекомендуемое значение — около 8-16 МБ, а для небольших баз — и того меньше.
innodb_file_per_table. Если включить эту опцию, Innodb будет сохранять данные всех таблиц в отдельных файлах (вместо одного файла по умолчанию). Прироста в производительности не будет, однако есть ряд преимуществ:
- При удалении таблиц, диск будет освобождаться. По умолчанию общий файл данных может только расширяться, но не уменьшаться.
- Использование компрессионного формата таблиц потребует включить этот параметр.
Следует выставить значение innodb_file_per_table = ON
innodb_flush_logs_at_trx_commit — Значение по умолчанию 1 означает, что после каждой завершенной транзакции (или после изменения состояния транзакции) лог должен быть сброшен на диск. Это достаточно ресурсоемкая операция.
Многие приложения, особенно те, в которых раньше использовался MyISAM будут хорошо работать при значении 2, который означает, что не надо сбрасывать буфер на диск, а следует отправить его в кэш операционной системы. Лог по-прежнему будет сбрасываться на диск каждую секунду и максимум, что вы можете потерять — это 1-2 секунды записей. Значение 0 обеспечивает более высокую скорость, но и более низкую надежность.
Следует выставить значение innodb_flush_logs_at_trx_commit = 0 или innodb_flush_logs_at_trx_commit = 2
innodb_flush_method Рекомендуется — innodb_flush_method = O_DIRECT, либо innodb_flush_method = O_DSYNC чтобы избежать двойного кеширования (выключает операционный кеш для файлов данных MySQL) .
O_DSYNC будет работать быстрее, чем O_DIRECT, но не так надежно.
transaction-isolation. Уровень изоляции транзакций. Рекомендуется значение READ COMMITTED. Это уровень изолированности, который устанавливается по умолчанию — в большинстве СУБД (но не в MySQL!). Он соответствует приведенному ранее простому определению изолированности: транзакция увидит только те изменения, которые к моменту ее начала подтверждены другими транзакциями, а произведенные ею изменения останутся невидимыми для других транзакций, пока текущая не будет подтверждена. Задается строкой:
transaction-isolation = READ-COMMITTED
innodb_doublewrite. Doublewrite представляет собой буфер двойной записи и используется в InnoDB чтобы изменённые страницы были записаны в файл данных. Позволяет избежать потери данных при внезапном сбое сервера. В этом режиме InnoDB перед записью страниц в основной файл данных предварительно записывает их в непрерывную область — doublewrite. В целом не рекомендуется отключать на продакшене при работе с ценными данными, т.к. в результате сбоя сервера повреждается файл с данными без возможности сделать repair.
В остальных случаях можно ускорить работу выставив innodb_doublewrite = 0
innodb_io_capacity. Параметр контролирует, как много операций запросов на запись за секунду будет совершать сервер при выполнении операций сброса на диск. На стандартных значениях SSD-диски зачастую не могут реализовать полностью свой потенциал, для них рекомендуемое значение следующее: innodb_io_capacity = 2000
sync_binlog. Параметр sync_binlog определяет логику синхронизации данных из бинлога с диском. Если значение равно 1, запись на диск будет происходить после каждой транзакции. Это делает хранилище очень надежным, но крайне сильно нагружает дисковую подсистему. Значение 0 отключит синхронизацию из Mysql, и база данных будет полагаться на ОС в вопросе записи лога на диск. Такое значение может сильно увеличить производительность. Задаём значение sync_binlog = 0
Также для всех типов таблиц рекомендуется настроить следующие параметры:
skip-name-resolve — не определять доменные имена для IP-адресов подключающихся клиентов. При этом пользовательские разрешения нужно настраивать не на хосты, а на IP-адреса (за исключением localhost). Если вы соединяетесь с сервером только с локальной машины, то особого значения не имеет. Для внешних соединений ускорит установку соединения.
skip-external-locking — опция установлена по умолчанию, начиная с версии 4. Указывает MySQL-серверу не использовать внешние блокировки при работе с базой. Внешние блокировки необходимы в ситуациях, когда несколько серверов работают с одними и теми же файлами данных, т.е. имеют одинаковую datadir, что на практике не используется.
sql_mode. Контроль режимов работы sql. Рекомендуется режимов не задавать, задав строку в виде
sql_mode = »
table_open_cache. Оптимальное значение рассчитывается как количество таблиц во всех базах, умноженное на 2, ориентировочно рекомендуем устанавливать опцию в 2048.
thread_cache_size определяет максимальное количество тредов в кеше. Когда новый клиент устанавливает соединение с Mysql, Mysql открывает создает новый тред (thread) для этого клиента. В средах с больших количеством клиентов и соединений, создание и удаление тредов становится дорогой операцией. Для того, чтобы оптимизировать этот процесс, существует настройка thread_cache_size. Вместо постоянного создания и удаления, Mysql может сохранять неактивные треды в кеш (и использовать в случае необходимости).
Если есть возможность, рекомендуется установить это значение не меньше, чем значение переменной max_used_connections. Если значение max_used_connections больше 128, рекомендуется ограничиться этим значением.
Проверить значение max_used_connections можно подключившись к MySQL и введя команду:
show status LIKE «max_used_connections%
Чтобы изменения вступили в силу необходимо перезагрузить mysql командой:
service mysqld restart
