1с битрикс настройки php
Наши решения используют дополнительные библиотеки а также требуют дополнительной настройки сервера под высокие нагрузки, чтобы сайт работал стабильно. Например при запуске выгрузок в многопоточном режиме или же каталогов большого размера. Что же надо сделать чтобы настроить типовое окружение Битрикс под ОС Centos 7 для бесперебойной работы наших модулей?
Давайте для начала перечислим конфигурационные файлы в которых проводиться изменение основных настроек сервера под управлением ОС Centos 7 и установленным окружением 1С-Битрикс.
Главным конфигурационным файлом по умолчанию является /etc/rc.d/init.d/bvat - это скрипт автоматической настройки в нем прописаны параметры используемые веб окружением Битрикс для автоматической настройки под имеющиеся физические ресурсы сервера. Данный скрипт удобен в использовании и позволяет в полностью автоматическом режиме применить настройки по умолчанию, задействовав отведенные серверу ресурсы.
Кроме него есть и конфигурационный файл сервера баз данных - /etc/mysql/conf.d/bvat.cnf в котором хранятся переменные сервера MySQL, перечислим рекомендуемые значения при наличии на вашем сервере 64 гигабайт физической памяти:
Но как все сделанное человеком, он не может настроить ваш сервер идеально, для тонкой настройки под конкретные рекомендации нужно использовать ручное управление конфигурационными файлами. Но часто под несложные проекты настраиваемых им рекомендуемых параметров MySQL, PHP и Apache в зависимости от ресурсов сервера бывает вполне достаточно, и если у вас не возникает никаких проблем, мы бы порекомендовали не отключать автоматическое конфигурирование.
Разработчики BitrixVM предусмотрели возможность изменения настроек без отключения скрипта автонастройки bvat. Для этого необходимо внести изменения в специальные конфигурационные файлы (в случае их отсутствия надо создать соответсвующие по указанным путям):
/etc/php.d/bitrixenv.ini - файл хранящий основные настройки сервера
/etc/php.d/z_bx_custom.ini - файл хранящий дополнительные настройки PHP
/etc/mysql/conf.d/z_bx_custom.cnf - файл хранящий дополнительные настройки MySQL
/etc/nginx/bx/conf/z_bx_custom.conf - файл хранящий дополнительные настройки nginx
/etc/nginx/bx/conf/im_settings.conf - файл хранящий настройки nginx-push-stream-module
Теперь перечислим основные конфигурационные файлы
/etc/php.ini - файл хранящий настройки PHP
/etc/my.cnf - файл хранящий настройки сервера базы данных MySQL
/etc/nginx/nginx.conf - файл хранящий настройки nginx
дополнительные используемые конфигурационные файлы
/etc/php.d/opcache.ini - файл хранящий настройки используемого акселератора opcache при условии его использования на сервере, кстати очень советуем его использовать так как он ускоряет выполнение PHP путем сохранения скомпилированного кода в памяти, таким образом исключается постоянное выполнение PHP сценария при каждом обращении к коду. Подобное кэширование и оптимизация работы PHP серьезно снижает нагрузку на ресурсы вашего сервера и поднимает его общую производительность.
Теперь перейдем к установке и настройке дополнительных библиотек, которые используют наши решения, но которые не поставляются в стандартном пакете веб окружения Битрикса. Кстати, если у вас используется не рекомендованное ПО, то заранее хочется посоветовать перейти на использование окружения поставляемого Битриксом, поверьте опыту сэкономите массу нервов и средств на настройке и обслуживании вашего сервера.
Рассматриваем вариант последовательного ввода команд при подключении к серверу по SSH
Установка библиотеки curl в для VMBitrix (CentOS)
yum install curl
echo "extension=curl.so" > /etc/php.d/curl.ini
apachectl graceful
Установка библиотеки xmlwriter в для VMBitrix (CentOS)
yum install php-xml
echo "extension=xmlwriter.so" > /etc/php.d/xmlwriter.ini
apachectl graceful
Установка библиотеки optipng jpegoptim в для VMBitrix (CentOS)
yum -y install optipng jpegoptim
В данной статье мы постарались собрать максимум конкретики для владельцев сайтов имеющих базовую подготовку в конфигурировании серверов.
Курс предназначен для организаций, предоставляющих услуги хостинга и желающих получить компетенцию Рекомендуемый хостинг.
В курсе рассматриваются требования платформы Bitrix Framework к хостингу, вопросы установки, настройки продукта а также вопросы инструментов и методов оптимизации серверов и баз данных для работы с системой
Для хостеров не является обязательным, но рекомендуется изучение курсов Контент-менеджер и Администратор. Базовый для получения более полного представления о возможностях системы и способах работы с ней.
Рекомендуется ознакомиться с опытом настройки и тестирования серверов в блоге Дениса Шаромова, а так же с отзывами клиентов о хостингах в группе Черный и белый список хостингов социальной сети компании "1С-Битрикс".
Если ваш хостинг на Windows, то вам может быть полезна группа 1С-Битрикс на платформе Windows Server 2008 в социальной сети сайта "1С-Битрикс". В ней пользователи делятся опытом работы системы на IIS 7.
После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче линейки тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
У нас часто спрашивают, сколько нужно заплатить
Курс полностью бесплатен. Изучение курса, прохождение итоговых тестов и получение сертификатов - ничего из этого оплачивать не нужно.
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:
уроке.
Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат - это если общее число набранных Вами баллов отличается от максимального на 1-2%.
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса. Версия файла от 28.04.2021.
Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
По умолчанию на новых серверах PHP работает в режиме mod_php, но при желании вы можете подключить режим mod_cgi, воспользовавшись нашей инструкцией.
Настройка опций в файле .htaccess
Директивы необходимо добавлять в самый конец или в самое начало файла, вне блоков кода
apc.cache_by_default
APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.
Управление APC осуществляется директивами:
default_charset
display_errors
Директива указывает, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Включение и выключение осуществляются следующим образом:
log_errors
Опция позволяет включить логирование ошибок php с их записью в произвольный файл (в примере errors.log). При указании пути к файлу замените u и user на первую букву вашего логина и сам логин.
magic_quotes_gpc
Волшебные кавычки (Magic Quotes) — это процесс автоматического экранирования входящих данных PHP-скрипта. Если опция включена, то одинарные (') и двойные (") кавычки и обратный слэш (\)экранируются обратным слэшем автоматически.
Включение и выключение magic_quotes осуществляется директивами:
mail.add_x_header
Опция позволяет включить логирование отправки почты из скриптов сайта. Логи будут содержать полный путь до скрипта, адрес получателя и заголовки. При указании пути к файлу, в который будут записываться логи (mail.log), замените u и user на первую букву вашего логина и сам логин.
max_input_vars
Директива указывает, сколько входных переменных может быть принято в одном запросе. Например:
mbstring.func_overload и mbstring.internal_encoding
Для корректной работы сайтов на старых версиях CMS Битрикс (до v20.100.0) требуются следующие параметры:
opcache.revalidate_freq
Отключение OpCache (настройка требуется для CMS Битрикс):
pcre.recursion_limit
Устанавливает лимит на рекурсию.
post_max_size
Опция устанавливает максимально допустимый размер данных, отправляемых методом POST. Также это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.
register_globals
Директивы для включения/выключения глобальных переменных:
request_order
Директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST.
upload_max_filesize
Устанавливает максимальный размер закачиваемого файла.
Настройка опций в файле php.ini
allow_url_fopen
Включение опции (для отключения значение = 0):
apc.cache_by_default
APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.
Отключение APC (для включения значение = 1):
default_charset
Указание кодировки по умолчанию:
display_errors
Включение вывода ошибок (для выключения значение = off).
magic_quotes_gpc
Отключение Magic Quotes (для включения значение = 1):
mail.add_x_header
Включение логирования отправки почты из скриптов сайта. В директиве mail.log указывается путь к файлу, в который будут сохраняться логи (замените u и user на первую букву вашего логина и сам логин).
max_input_vars
Изменение количества вводимых переменных:
mbstring.func_overload и mbstring.internal_encoding
Настройки для старых версий CMS Битрикс:
opcache.revalidate_freq
Отключение OpCache (настройка для CMS Битрикс):
pcre.recursion_limit
Лимит на рекурсию:
post_max_size
Максимальный размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize.
register_globals
Отключение Register Globals (для включения значение = 1):
request_order
Регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST.
upload_max_filesize
Устанавливает максимальный размер закачиваемого файла.
Опции, которые не могут быть изменены
К настройкам PHP, изменение которых невозможно в рамках виртуального хостинга, относятся:
Просмотр параметров php
Для того, чтобы просмотреть значения параметров php, установленных для конкретного сайта, создайте в его директории файл info.php со следующим содержимым:
В очередной раз пришлось повозиться с настройкой Bitrixenv и сайта на нем. В какой-то момент bitrix сайт стал сыпать 500-е ошибки на некоторые операции. По логам было видно, что не хватает памяти для работы некоторых скриптов, хотя раньше хватало. Пришлось заняться расследованием и оптимизацией потребления памяти bitrix сайтом.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный теcт.
Цели статьи
- Разобраться с потреблением памяти на сервере с bitrixenv - выяснить, кто больше всех потребляет памяти и приводит к нестабильной работе сервера.
- Разобраться, где хранятся настройки различных приложений в bitrixenv.
- Выбрать оптимальные параметры для apache, mysql, php, nginx для равномерного распределения памяти.
Введение
Вопрос с потреблением памяти mysql при работе в bitrixenv я уже разбирал отдельно некоторое время назад - где хранятся настройки mysql. Рекомендую с ней ознакомиться, так как там информация напрямую относящаяся к текущей теме оптимизации использования памяти сайта на bitrix при работе в bitrixenv.
Разработчики bitrixenv упростили работу системных администраторов по настройке сервера, внедрив службу bvat, которая автоматически при запуске сервера подбирает оптимальные параметры следующих служб:
Настройки будут зависеть от количества доступной оперативной памяти. В целом, это неплохой шаг, который упрощает начальную настройку сервера. Чаще всего конфигурация служб получается адекватной и подохдящей для типовых сайтов.
В моем случае стандартные настройки перестали подходить. На сервере время от времени появлялась нехватка оперативной памяти. Приходил OOM Killer (OOM — Out of memory) и грохал mysql сервер, так как он потреблял больше всего оперативной памяти. Какое-то время все работало нормально, потом провторялось то же самое.
Мое внимание привлекли события из мониторинга Zabbix, такие как Lack of available memory on server. Посмотрел график и все сразу стало ясно, еще до подключения к серверу.
Зашел на сервер, посмотрел системный лог. Увидел там вот это:
Первое, что я сделал - увеличил swap раздел до объема всей оперативной памяти. До этого он был размером в 1G. Это сразу помогло и предотвратило регулярный приход OOM Killer. А я стал спокойно разбираться, что делать дальше.
План дальнейшей настройки сервера для стабильной работы сайта на bitrix следующий:
- Определяем основных потребителей оперативной памяти.
- Распределяем всю свободную память между ними.
- Убеждаемся, что под нагрузкой все работает корректно, всем хватает памяти, OOM Killer не приходит.
Изменение стандартных настроек BitrixVM
Как я уже говорил, служба bvat автоматически регулирует некоторые настройки стандартных служб bitrixenv. Чтобы применять наши настройки, нужно их указывать в отдельных конфигурационных файлах.
А вот общий список всех основных конфигурационных файлов bitrixenv:
Оптимизация настроек Mysql
На подопытном сервере имеется 12 Гб оперативной памяти. Я решил половину этой памяти отдать под mysql. Приступим к тюнингу конфигурации mysql. В общем случае достаточно будет одного параметра, который в основном отвечает за потребление памяти:
В моем случае этого было недостаточно. Я решил более внимательно подойти к настройке mysql. Нашел неплохой инструмент - MySQLTuner, который анализируя работу mysql, выдает некоторые рекомендации по настройке. Сам я не разбираюсь в тонкой настройке mysql, поэтому решил довериться утилите. Судя по отзывам, она неплоха и доверять ей можно, если сам не разбираешься в теме. Забегая вперед скажу, что с помощью этого тюнера я настроил mysql на стабильную работу с фиксированным потребелением памяти. Проблем с этим сервером с тех пор не возникало.
Итак, копируем себе на сервер сам скрипт:
Для того, чтобы рекомендации получились более эффективные, служба mysql должна поработать у вас несколько дней. Если накануне перезапускали ее, а я это делал, то рекомендую через несколько дней зайти и еще раз прогнать тесты. Будут новые советы по конфигу.
Для оптимизации потребления памяти, достаточно будет прогнать скрипт в любое время. Я вам рекомендую внимательно изучить его возможности. Подробно на них я сейчас не буду останавливаться, а рассмотрю только то, что касается памяти. Помимо прочего, вы увидите следующую информацию.
У меня уже все оптимизировано под потребленее не более примерно 6 Гб памяти. Расскажу, какие параметры за это отвечают. Как уже сказал ранее, это параметр innodb_buffer_pool_size. В общем случае для mysql сревера рекомендуют указывать этот параметр равный 80% доступной памяти сервера. Но это в том случае, если у вас кроме mysql на этом сервере ничего не крутится. А у нас там полно других служб, поэтому нам такой совет не подходит.
Дальше нам нужно выяснить, сколько памяти занимает thread (процесс, который порождает соединение) и в соотвествии с этим выставить предел числа подключений. Размер thread равен сумме следующих парметров - read_buffer_size + sort_buffer_size + join_buffer_size.
Параметр read_buffer_size установлен по-умолчанию в 128 КБ. Я его не стал трогать. Остальные два я изначально выставил по рекомендациям mysqltuner, а значение max_connections, которое отвечает за максимальное количество подключений, выставил такое, чтобы сумма трех буферов, помноженная на количество подключений не превышала 2 Гб памяти. Сервер немного поработал в таком режиме и выяснилось, что выставленных подключений не хватает. Тогда я снизил join_buffer_size до 18 Мб, а количество подключений увеличил. В итоге остановился на таких настройках.
На практике так и получилось. Через несколько дней я зашел и прогнал еще раз проверку, которая показала, что реально использование памяти не вышло за эти пределы. Плюс, подредактировал некоторые параметры.
Советы по изменению параметров даются в заключительной секции mysqltuner - Variables to adjust. Не буду приводить свои рекомендации, так как они будут актуальны только для конкретного сервера. Советую посмотреть все рекомендации, почитать описание параметров и попробовать применить их у себя. Слепо не надо менять то, что там советуют.
Приведу список основных параметров mysql, которые влияют на производительность и на которые надо в первую очередь обращать внимание:
- max_connections
- log_bin
- table_open_cache_size
- table_definitions_cache_size
- open_files_limit
- innodb_buffer_pool_size
- innodb_log_file_size
- innodb_flush_log_at_trx_commin
- innodb_flush_method=O_DIRECT
Список взял отсюда. Очень полезная статья, рекомендую.
Оптимизация настроек apache в bitrixenv
Будет один основной процесс, который занимает больше всего памяти и дальше его форки, которые потребляют примерно одинаково. На них и ориентируйтесь. У меня основной процесс потребляет 500 Мб и 30 форков по 100 Мб. В сумме получается 3.5 Гб.
Оптимизация php под bitrix
Из настроек php я бы обратил внимание на следующие параметры:
Так или иначе, эти параметры, кроме sendmail, влияют на производительнойсть сервера и потребление памяти. Не ставьте эти значения слишком большими без особой надобности. Я бы для начала выставил в 256 Мб и увеличивал по мере необходимости. Да, 256 Мб это и так очень много, но сайт на bitrix требует высоких значений этих параметров для корректной работы. 256 мб это общая рекомендация для дефолтных значений.
Свои параметры php вы можете размещать в отдельном конфиге, который не будет перетираться bitrixenv - /etc/php.d/z_bx_custom.ini. После изменения настроек надо перезапускать apache для применения.
Настройка nginx для сайта bitrix
В самом nginx в bitrixenv настраивать для производительности особо нечего. Он работает в качестве proxy сервера для apache. С помощью proxy_pass он перенаправляет все динамические запросы, а сам отдает только статику. В таком режиме работы он потребляет минимум ресурсов и оптимизировать в нем нечего. Если вам все же интересно разобраться в настройках nginx, то читайте мою отдельную подробную статью.
Отдельной настройки требует только модуль Push and Pull, если он у вас используется. Его конфигурация располагается в файле /etc/nginx/bx/conf/push-im_settings.conf. В контексте данной статьи нас интересует только параметр push_stream_shared_memory_size, который отвечает за использование оперативной памяти.
В принципе, дефолтного значения 256 Мб обычно хватает, хотя по сути это небольшие цифры. Но имейте ввиду, что если свободной памяти совсем нет, то можно подрезать этот параметр.
Заключение
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!
После оптимизации всех указанных выше параметров в bitrixenv, потребление памяти сервером стабилизировалось. Bitrix сайт стал работать ровно с предсказуемой производительностью без неожиданных тормозов и падений.
На этом у меня все по теме оптимизации настроек сервера под bitrix. Система интересная и многогранная. Всегда любопытно заглянуть под капот bitrixenv. Как по мне, сделано неплохо, хотя и доставляет хлопот при разборе каких-то иницидентов.
В целом считаю, что в общем случае, все сделано удобно и функционально для быстрого запуска bitrix сайта. Справится даже неподготовленный человек, а конкретно какой-нибудь программист. Он бы запарился настраивать эту связку самостоятельно, а тут все из коробки работает. Но вот если возникают проблемы, то разобраться бывает не всегда просто.
Следующим этапом жду появление docker сборок с bitrixenv внутри. Либо один общий образ, либо набор через docker-compose. Это было бы логичное продолжение развития в свете популярности контейнеров и микросервисов.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Проверьте себя на вступительном тесте и смотрите подробнее программу ссылке.
Быстрая установка позволяет в упрощенном виде установить продукт «1C-Битрикс». Во время такой установки мастером пропускаются шаги лицензионного соглашения, предварительной проверки хостинга, выбора и настройки базы данных и т.п.
Примечание: Быстрая установка не рекомендуется для MSSQL и Oracle из-за сложности настроек этих баз данных, хоть и поддерживается в продуктах «1C-Битрикс». Установку продукта для баз данных MSSQL и Oracle лучше производить стандартным мастером.
Все необходимые данные для установки содержатся в файлах /bitrix/php_interface/dbconn.php и /bitrix/.settings.php (настройки для нового ядра D7), которые нужно создать и поместить в необходимые директории устанавливаемого дистрибутива.
Пример файла /bitrix/php_interface/dbconn.php
Рассмотрим каждую строку подробнее:
- SHORT_INSTALL - если указано значение true , то запускается упрощенный мастер установки.
- SHORT_INSTALL_CHECK - проверка параметров окружения (права доступа к файлам, БД и т.п). Если такой константы нет, проверка будет выполнена на первом хите. После этого в начало dbconn.php запишется define("SHORT_INSTALL_CHECK", true);
- MYSQL_TABLE_TYPE - выбор типа таблиц MySQL: MyISAM или InnoDB .
- BX_UTF - выбор кодировки сайта: true - UTF8, false - CP1251.
- DBPersistent - если данная константа инициализирована значением true , то будет создаваться постоянное соединение с базой, иначе - обычное.
Примечание: При создании соединения с базой в памяти создается дескриптор данного соединения. Если соединение обычное, то после отработки скрипта это дескриптор удаляется. Если соединение постоянное, дескриптор остается и может быть использован другими процессами при необходимости. Достоинством постоянного соединения является то, что, как правило, времени на него требуется меньше, но в то же время есть недостаток - количество открытых постоянных соединений ограничивается в настройках базы данных и при превышении этого лимита посетитель не сможет зайти на сайт пока не освободятся новые соединения.
- MySQL - адрес и порт сервера базы данных (например, localhost или 192.168.3.155:31007 , если БД находится на другом хосте и на нестандартном порту).
- MSSQL - строка соединения с сервером (например, для ODBC: DRIVER=SQL Server; SERVER=TESTSQL , для Native: TESTSQL ).
- Oracle - не используется.
- MySQL - имя базы (например, sitemanager ).
- MSSQL - имя базы (например, sitemanager_mssql_odbc )
- Oracle - строка соединения с базой данных.
Например:
Примечание: Базы данных должны быть заранее созданы на хостинге. Например, для кодировки сайта в UTF8 при создании MySQL-базы collation для нее должно быть utf8_unicode_ci , в CP1251 - cp1251_general_ci .
Внимание: Ведение подобного лога может серьезно замедлить работу сайта, поэтому пользоваться этим стоит кратковременно.
Внимание: В PHP должно быть установлено расширение mysqli, дополнительные проверки на наличие расширения не производятся! Включать mysqli нужно отдельно для старого (dbconn.php) и нового ( .settings.php) ядра.
Пример файла /bitrix/.settings.php
Примечание: Некоторые секции файла настроек содержат параметр readonly. Если он принимает значение true , то данные настройки нельзя изменить через API.
- utf_mode - отвечает за кодировку сайта, значения value :
- true - UTF8;
- false - CP1251.
- config_options - время жизни кэша настроек сайта в секундах;
- site_domain - время жизни кэша настроек домена в секундах.
Таким образом, быстрая установка начнется с Пятого шага мастера установки продукта.
Читайте также: