Производительность Битрикс: что сделать с сервером, чтобы сайт работал быстрее

От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт тормозит только в момент пиковых нагрузок (часы наибольшей посещаемости, периоды акций) и вы теряете всех, кого так тщательно привлекали.

От чего зависит скорость сайта на Битриксе?
  • оптимизация компонентов сайта
  • набор модулей
  • оптимизация серверного ПО
  • достаточное количество ресурсов сервера
С оптимизацией компонентов сайта вам поможет разработчик. Но если есть навыки администрирования, можно перейти на nginx+php-fpm и оптимизировать настройки.

В большинстве случаев, чтобы повысить производительность, нужен анализ текущей нагрузки на сервер. Такое умеют наши администраторы. Но есть и базовые настройки, которых достаточно, чтобы улучшить производительность Битрикс на большинстве серверов. Америку не открываем, если вы хорошо знакомы с *nix, едва ли вы обнаружите что-то новое.

В качестве ОС будем использовать минимальную версию Debian 9. Потому что в предыдущей статье про производительность Битрикс мы использовали именно её. В конце сравним показатели получившейся конфигурации с BitrixVM.

Веб-сервер — Nginx
Лучшим решением будет использование в качестве веб-сервера Nginx. Он шустро работает со статичным контентом и не плодит форков, как это делает apache2. Форки apache2 часто оказываются причиной перерасхода сервером оперативной памяти, потому выбор Nginx снижает требования к объему RAM.

Ставим и конфигурируем Nginx:
apt install nginx
upstream php {
    server 127.0.0.1:9000;
}
server {
    root /var/www/html/;
    server_name _;
    listen 80 default_server;
    index index.php;
    location / {
        try_files \$uri \$uri/ /bitrix/urlrewrite.php?\$args;
    }
    location ~ \.php$ {
        include        fastcgi_params;
        fastcgi_pass   php;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME \$document_root/\$fastcgi_script_name;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)\$ {
        expires max;
        log_not_found off;
    }
}


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

Сервер БД
В качестве сервера БД используем MariaDB 10.1 из репозитория ОС. Практика показывает, что для нашей задачи гнаться за последними версиями MySQL/MariaDB совершенно не обязательно — значительной разницы в производительности нет.

Важно! После развертывания сайта нужно выполнить «Проверку системы» с исправлением ошибок структуры БД, а также «Оптимизацию БД», оба действия выполняются в админке Битрикс. Эти операции создадут индексы и устранят фрагментацию, что благотворно скажется на производительности.

Ставим и конфигурируем MariaDB:
apt install mariadb-server
cat <<-\EOF >/etc/mysql/mysql.conf.d/server.conf
    [mysqld]
    innodb_buffer_pool_size=384M #это значение нужно подбирать исходя из размера innodb таблиц
    innodb_buffer_pool_instances=1 # По одному пункту на каждый Гб innodb_buffer_pool_size
    innodb_flush_log_at_trx_commit=2
    innodb_flush_method=O_DIRECT
    query_cache_type=1
    query_cache_size=16M
    query_cache_limit=4M
    key_buffer_size=256M
    join_buffer_size=2M
    sort_buffer_size=4M
    tmp_table_size=128M
    max_heap_table_size=128M
    thread_cache_size=4
    table_open_cache=2048
    max_allowed_packet=128M
    transaction-isolation=READ-COMMITTED
    performance_schema=OFF
    sql_mode=""
EOF


PHP-FPM
Ещё одна причина отказа от apache2 — использование php-fpm, наиболее быстрого режима работы php-интерпретатора. Наиболее производительной на текущей момент является php7.3, однако в официальном репозитории Debian 9 мы имеем php7. Из соображений связности с предыдущей статьей про производительность Битрикс тут мы тоже будем использовать php7 из репозитория Debian.

Ставим и конфигурируем php-fpm:
apt install php-fpm php-opcache php-mysqli php-gd php-curl php-xml php-mbstring php-json
cat <<-\EOF >/etc/mysql/mysql.conf.d/server.conf
    ;###Bitrix optimize
    date.timezone=Europe/Moscow
    short_open_tag=1
    max_input_vars=10000
    mbstring.func_overload=2 ;Этот пункт нужен если используется utf8
    mbstring.internal_encoding=utf-8 ;Этот пункт нужен если используется utf8
    upload_max_filesize=64M
    post_max_size=64M
    opcache.max_accelerated_files=100000
    realpath_cache_size=4096k
    memory_limit=512M
    pcre.jit=0
    opcache.revalidate_freq=0
EOF
cat <<-\EOF >/etc/php/7.0/fpm/php.ini
    [www]
    user = www-data
    group = www-data
    listen = 127.0.0.1:9000
    listen.allowed_clients = 127.0.0.1
    listen.owner = www-data
    listen.group = www-data
    pm = dynamic
    pm.max_children = 10
    pm.start_servers = 2
    pm.min_spare_servers = 2
    pm.max_spare_servers = 5
EOF


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

Настраиваем и применяем:
apt install cpufrequtils
echo 'GOVERNOR="performance"' > /etc/default/cpufrequtils
cpupower frequency-set --governor performance


Сравниваем производительность
Производительность получившейся конфигурации:


Производительность в окружении BitrixVM:



Если вы оптимизировали сервер по инструкции, но производительность всё равно не устраивает — нужно провести диагностику нагрузки и решить, что вам требуется:
1. Обратиться к разработчику для оптимизации кода
2. Найти дополнительные варианты оптимизации
Например, перенести сессии в оперативную память, настроить Nginx кеширование, заблокировать нежелательных ботов.
3. Добавить ресурсов сервера
Даже в случае с идеально написанным сайтом и не менее идеально оптимизированным сервером в какой то момент узким местом окажутся ресурсы.

Недостаток оперативной памяти не позволит полностью задействовать процессор, а избыток памяти при полностью загруженном работой процессоре не принесёт никакой пользы. Если узким местом оказывается пропускная способность сети — пришло время задуматься о переходе на выделенные серверы с гигабитным каналом. Как выбрать сервер для Битрикс есть в моей предыдущей статье.

Чтобы понять, какой вариант дальнейших действий ваш — обратитесь к системному администратору. Если ваш сайт на наших серверах для Битрикс — помогут наши ребята. Первый месяц после заказа сервера администрирование бесплатно.

Плюс для наших серверов под Битрикс можно использовать уже готовый рецепт с описанной оптимизацией — GT: для Centos7, с MariaDB (10.3), Nginx (1.14.2) и наиболее производительной версией php (7.3). Эти VDS живут на новейшем железе: высокочастотных процессорах Core i9-9900k и скоростных NVMe-дисках.
firstvds.ru/hosting/bitrix
Выделенные серверы OVH
Выделенные серверы Hetzner

0 комментариев

Оставить комментарий