Содержание
- 1 Цели статьи
- 2 Введение
- 3 Изменение стандартных настроек BitrixVM
- 4 Оптимизация настроек Mysql
- 5 Оптимизация настроек apache в bitrixenv
- 6 Оптимизация php под bitrix
- 7 Настройка nginx для сайта bitrix
- 8 Заключение
- 9 Онлайн курс по Linux
- 10 Откроем нужные порты для корректной работы Битрикс Веб-окружение
- 11 Настройка Битрикс Веб-окружение
- 12 Установка CMS Битрикс
- 13 Что получим
- 14 Установка «1С-Битрикс: Веб-окружение» на сервер
- 15 Настройка Веб-окружения Битрикс
В очередной раз пришлось повозиться с настройкой Bitrixenv и сайта на нем. В какой-то момент bitrix сайт стал сыпать 500-е ошибки на некоторые операции. По логам было видно, что не хватает памяти для работы некоторых скриптов, хотя раньше хватало. Пришлось заняться расследованием и оптимизацией потребления памяти bitrix сайтом.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .
Цели статьи
- Разобраться с потреблением памяти на сервере с bitrixenv — выяснить, кто больше всех потребляет памяти и приводит к нестабильной работе сервера.
- Разобраться, где хранятся настройки различных приложений в bitrixenv.
- Выбрать оптимальные параметры для apache, mysql, php, nginx для равномерного распределения памяти.
Введение
Вопрос с потреблением памяти mysql при работе в bitrixenv я уже разбирал отдельно некоторое время назад — где хранятся настройки mysql. Рекомендую с ней ознакомиться, так как там информация напрямую относящаяся к текущей теме оптимизации использования памяти сайта на bitrix при работе в bitrixenv.
Разработчики bitrixenv упростили работу системных администраторов по настройке сервера, внедрив службу bvat, которая автоматически при запуске сервера подбирает оптимальные параметры следующих служб:
- mysql
- apache
- nginx
- php
Настройки будут зависеть от количества доступной оперативной памяти. В целом, это неплохой шаг, который упрощает начальную настройку сервера. Чаще всего конфигурация служб получается адекватной и подохдящей для типовых сайтов.
В моем случае стандартные настройки перестали подходить. На сервере время от времени появлялась нехватка оперативной памяти. Приходил OOM Killer (OOM — Out of memory) и грохал mysql сервер, так как он потреблял больше всего оперативной памяти. Какое-то время все работало нормально, потом провторялось то же самое.
Мое внимание привлекли события из мониторинга Zabbix, такие как Lack of available memory on server. Посмотрел график и все сразу стало ясно, еще до подключения к серверу.
Зашел на сервер, посмотрел системный лог. Увидел там вот это:
kernel: Out of memory: Kill process 7382 (mysqld) score 431 or sacrifice child kernel: Killed process 7382 (mysqld) total-vm:3967860kB, anon-rss:1942144kB, file-rss:0kB, shmem-rss:0kB systemd: mysqld.service: main process exited, code=killed, status=9/KILL systemd: Unit mysqld.service entered failed state. systemd: mysqld.service failed. systemd: mysqld.service holdoff time over, scheduling restart. systemd: Stopped MySQL Server. systemd: Starting MySQL Server... systemd: Started MySQL Server.
Первое, что я сделал — увеличил swap раздел до объема всей оперативной памяти. До этого он был размером в 1G. Это сразу помогло и предотвратило регулярный приход OOM Killer. А я стал спокойно разбираться, что делать дальше.
План дальнейшей настройки сервера для стабильной работы сайта на bitrix следующий:
- Определяем основных потребителей оперативной памяти.
- Распределяем всю свободную память между ними.
- Убеждаемся, что под нагрузкой все работает корректно, всем хватает памяти, OOM Killer не приходит.
Изменение стандартных настроек BitrixVM
Как я уже говорил, служба bvat автоматически регулирует некоторые настройки стандартных служб bitrixenv. Чтобы применять наши настройки, нужно их указывать в отдельных конфигурационных файлах.
- MySQL — /etc/mysql/conf.d/z_bx_custom.cnf
- Apache — /etc/httpd/bx/custom/z_bx_custom.conf
- nginx — /etc/nginx/bx/conf/z_bx_custom.conf
- PHP — /etc/php.d/z_bx_custom.ini
А вот общий список всех основных конфигурационных файлов bitrixenv:
- /etc/php.d/bitrixenv.ini — основные настройки php
- /etc/httpd/bx/conf/prefork.conf — параметры модуля Apache — MPM prefork;
- /etc/php.d/z_bx_custom.ini — пользовательские настройки PHP;
- /etc/httpd/bx/custom/z_bx_custom.conf — пользовательские настройки Apache;
- /etc/mysql/conf.d/z_bx_custom.cnf — пользовательские настройки MySQL;
- /etc/nginx/bx/conf/z_bx_custom.conf -пользовательские настройки nginx;
- /etc/nginx/bx/conf/push-im_settings.conf — настройки nginx-push-stream-module.
Оптимизация настроек Mysql
На подопытном сервере имеется 12 Гб оперативной памяти. Я решил половину этой памяти отдать под mysql. Приступим к тюнингу конфигурации mysql. В общем случае достаточно будет одного параметра, который в основном отвечает за потребление памяти:
innodb_buffer_pool_size = 4G
В моем случае этого было недостаточно. Я решил более внимательно подойти к настройке mysql. Нашел неплохой инструмент — MySQLTuner, который анализируя работу mysql, выдает некоторые рекомендации по настройке. Сам я не разбираюсь в тонкой настройке mysql, поэтому решил довериться утилите. Судя по отзывам, она неплоха и доверять ей можно, если сам не разбираешься в теме. Забегая вперед скажу, что с помощью этого тюнера я настроил mysql на стабильную работу с фиксированным потребелением памяти. Проблем с этим сервером с тех пор не возникало.
Итак, копируем себе на сервер сам скрипт:
# wget http://mysqltuner.pl/ -O mysqltuner.pl
Запускаем его:
# perl mysqltuner.pl
Для того, чтобы рекомендации получились более эффективные, служба 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 Мб, а количество подключений увеличил. В итоге остановился на таких настройках.
innodb_buffer_pool_size = 4G sort_buffer_size = 18M join_buffer_size = 18M max_connections = 70
С такими настройками максимальное потребление памяти службой mysql не будет превышать 6.8 Гб, о чем подсказывает вывод mysqltuner. Конкретно моему сайту 70 подключений к mysql достаточно. До этого поставил 50, были сообщения о нехватке подключений. На своем сервере выбирайте параметры сами, у меня не копируйте.
[OK] Maximum possible memory usage: 6.8G (58.69% of installed RAM)
На практике так и получилось. Через несколько дней я зашел и прогнал еще раз проверку, которая показала, что реально использование памяти не вышло за эти пределы. Плюс, подредактировал некоторые параметры.
Советы по изменению параметров даются в заключительной секции 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
Дальше переходим ко второму основному потребителю оперативной памяти на сервере с сайтом на bitrix — apache. Ему, как и для mysql, служба bvat автоматически выставляет некоторые настройки. Она хранятся в файле /etc/httpd/bx/conf/prefork.conf. Нас будут интересовать настройки, касающиеся количества запущенных процессов.
Чтобы узнать, количество запущенных процессов httpd, обслуживающих работу bitrix сайта, введите в консоли сервера команду:
# ps ax | grep httpd | wc -l
Вы получите число, на 2 больше, чем указано в приведенном конфиге, в параметрах модуля mpm_prefork. В моем случае bvat выставлял максимально возможное количество процессов httpd равное 60, но для меня это было слишком много, сервер не тянул такое количество процессов. Я его уменьшил до 30.
Как вы понимаете, в зависимости от bitrix сайта, один процесс httpd будет использовать разное количество памяти, поэтому автоматически невозможно выставить этот параметр корректно для всех сайтов. В данном случае, дефолтный параметр мне не подошел, поэтому я создал свой файл настроек httpd — /etc/httpd/bx/custom/z_bx_custom.conf.
Привожу скриншотом, потому что движок сайта проглатывает все строки в угловых скобках. Не получается выложить полностью конфиг в текстовом виде. В общем случае, вам надо посмотреть, сколько у вас занимает памяти один процесс httpd и рассчитать максимальное количество процессов, которое потянет ваш сервер.
Посмотреть, сколькло памяти занимает один процесс httpd можно в htop или с помощью команды:
# ps -o vsz,rss,cmd --pid $(pgrep httpd)
Будет один основной процесс, который занимает больше всего памяти и дальше его форки, которые потребляют примерно одинаково. На них и ориентируйтесь. У меня основной процесс потребляет 500 Мб и 30 форков по 100 Мб. В сумме получается 3.5 Гб.
Итого в пике у меня 6.5 Гб использует mysql и 3.5 Гб использует httpd, итого 10 Гб из доступных 12-ти. На практике, свободной памяти обычно больше, чем 2 Гб, так как mysql чаще всего потребляет ниже максимального предела.
Оптимизация php под bitrix
Из настроек php я бы обратил внимание на следующие параметры:
- memory_limit — максимальное количетсво памяти на выполнение php скрипта;
- sendmail_path — управляет параметрами отправки сообщений, хотя к теме текущей статьи и не имеет отношение;
- post_max_size — максимальный размер данных для всего POST запроса;
- upload_max_filesize — максимальный размер файла для загрузки через POST запрос;
- max_execution_time — максимальное время в секундах, в течение которого скрипт должен полностью загрузиться.
Так или иначе, эти параметры, кроме 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. Это было бы логичное продолжение развития в свете популярности контейнеров и микросервисов.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Помогла статья? Есть возможность отблагодарить автора
После процесса покупки VDS хостинга описанного в предыдущей статье «Сервер Битрикс» нам необходимо установить в систему пакет «Битрикс Веб-окружение», выполните следующие предварительные действия:
Заходим по ssh (в терминальном режиме):
На свежей установленной Cent OS выполнить команды: 1) wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh — качаем скрипт установки 2) chmod +x bitrix-env.sh — делаем исполняемым 3) ./bitrix-env.sh — запускаем.
После всех ожиданий установка завершена.
перезагружаем сервер командой 1) Reboot
Откроем нужные порты для корректной работы Битрикс Веб-окружение
Настройка Битрикс Веб-окружение
После перезагрузки вам предложат ввести два раза пароль пользователя Битрикс.
Далее появиться окно с выбором команд.
Вводим 1 и enter, нам предложат указать имя сервера вводим имя или используем предложенное по умолчанию и создаём сервер.
Мы успешно создали сервер, теперь он доступен по адресу http://ваш_ip_адрес/ или по доменному имени, если вы настроили ДНС с указанием ip вашего сервера.
В адресной строки браузера набираем http://ваш_ip_адрес/ откроется мастер установки продукта
Установка CMS Битрикс
Переходим к регистрации продукта:
Вводим ключ или надпись DEMO, происходит копирования файлов.
Создание администратора:
После создания выбираем решение для установки, это на ваше усмотрение.
После всех выборов решение установлено.
Всё переходим на сайт и пользуемся.
В начале этого года Битрикс выпустили новую, седьмую, версию своего “Веб-окружения”. Самое главное – теперь официально поддерживается установка на CentOS 7 и php 7. Небольшое пояснение, если вы не в курсе. «1С-Битрикс: Веб-окружение» – это готовая среда с предустановленным рекомендуемым набором программного обеспечения, необходимого для корректной работы CMS 1С-Битрикс. Поставляется как в большом многообразии – есть готовые образа для различной виртуализации (подробнее см. на официальном сайте) и установочный скрипт для установки на сервер. Вот работу с последним мы и рассмотрим.
Что получим
- memcached – сервис обеспечивающий кеширование данных в ОЗУ, при правильном использовании дает значительное ускорение работы. По умолчанию не используется;
- stunnel – для организации шифрованных ssl-тунелей;
- catdoc – библиотека для работы с форматами MS Office. В частности используется для поиска по документам;
- xpdf – задачи те же что и пунктом выше, только для PDF;
- munin и nagios – мониторинг состояния сервера. По умолчанию не используется;
- sphinx – полнотекстовый поиск. На данный момент наилучшее решение по удобству, качеству и скорости поиска. По умолчанию не используется.
Само собой все это уже настроено на корректную работу друг с другом. Давайте ставить.
Установка «1С-Битрикс: Веб-окружение» на сервер
Качаем скрипт установки – актуальную ссылку на скачивание можно поглядеть на оф. сайте. Запускать надо root’ом и далее подразумевается, что мы находимся в /root
. Если нет, перейдите выполнив:
В процессе установки будут задаваться уточняющие вопросы. n
или N
служат для отказа, любой другой ввод – для соглашения. Т.е. что бы согласится достаточно нажать Enter
.
Если у вас включен SElinux, то первым шагом попросят отключить:
Соглашаемся и жмем Enter
для подтверждения. После успешного отключения надо перегрузить сервер:
После перезагрузки заново запускаем скрипт установки.
Запуск установки “1С-Битрикс: Веб-Окружение”
Первым будет запушен процесс обновления системы, что бы актуализировать версии установленных пакетов. Т.е. по сути:
Затем будет установлено все необходимое ПО. Процесс установки занимает около 10-15 мин. После установки спросят, хотим ли мы задать пароль root для MySQL. Соглашаемся и устанавливаем:
При первом запуске нас попросят задать пароль для пользователя bitrix
.
Первый запуск 1С-Битрикс: Веб окружение
Задаем пароль и попадаем в стартовое меню “1С-Битрикс: Веб-окружение”. Установка завершена, переходим к настройке.
Настройка Веб-окружения Битрикс
Меню при первом запуске
Чем хороши скрипты Веб-окружения, то это тем, что позволяют настроить веб-сервер под 1С-Битрикс, не обладая глубокими знаниями по администрированию Linux. А для тех, кто разбирается, сократить время на рутинные операции по настройке сервера. Теоретически, вам вообще нет необходимости выходить из оболочки веб-окружения, все должно делается ее средствами. На практике, конечно, это не совсем так, но для быстрого запуска веб-сервера, это отличное решение. Давайте все же немного разберемся с настройками и создадим среду для сайта, куда развернем Битрикс: Управление Сайтом (БУС). Первым делом нам надо создать Menengment pool (управляемую среду). Для этого выбираем пункт 1 меню (жмем цифру 1 и Enter
). Запустится мастер который попросит вас ввести FQDN адрес вашего сайта. Вводите имя вашего домена без www, http и т.п. Т.к. я настраиваю в локальной виртуальной среде, у меня это будет mysite.local.
Создаем управляемую среду (Managment pool) в веб-окружении Битрикс.
После этого в главном меню добавится значительное число пунктов.
Главное меню, после создания пула
Собственно, на этом можно было бы и остановится, если вы перейдете по адресу, который вы задали для среды, то увидите следующее:
Среда создана, можно ставить Битрикс
Настройка почты
Этот пункт первый, который надо сделать еще до установки самой CMS. Идем сначала 6. Manage sites in the pool
, затем 4. Change email settings on site
. Затем выбираем сайт, для которого идет настройка, если он у нас один (будет обозначен как default), то просто жмем Enter
. Затем:
- Enter from address (ex. bob@example.org): указываем адрес от имени которого будет происходить рассылка, желательно указывать существующий;
- Enter server address or DNS (127.0.0.1): оставляем как указано и жмем
Enter
; - Enter server port (25): то же оставляем как есть;
- Do you want to use SMTP authentication on the 127.0.0.1:25? (N|y) – нет, спасибо. Вводим
n
; - Do you need TLS enable for 127.0.0.1:25 (n|Y): то же нет, вводим
n
.
Собственно все видно на скриншоте:
Настраиваем почту
В Битрикс, запускаем “Проверку системы” и убеждаемся, что все в порядке:
Почта работает
Надеюсь, вы понимаете, что к отправленной таким образом почте будет крайне мало доверия. Поэтому рекомендую настраивать почту через реальный SMTP сервер с аутентификацией и настроенным DKIM. И ещё один момент – почтовый лог пишется в /home/bitrix/msmtp_default.log
Включаем memcached
В главном меню переходим к пункту 4. Configure memcahed servers
. И затем 1. Create memcached server
. Затем вводим имя хоста для которого будет запущен сервис. В нашем случае он у нас один.
Включаем memcached для Битрикс: Веб-окружение
Собственно все – как видно на скрине, все запущено. Жмем Enter для возврата в предыдущее меню. После этого не забудьте включить поддержку memcached в Битрикс – как описано в официальной документации.
Включаем sphinx
Аналогично добавим для Битрикс поддержку полнотекстового поиска через sphinx. Выбираем 7. Manage sphinx in the pool
, затем 1. Create sphinx instance on server
Здесь нам надо сначала ввести имя хоста, а затем имя базы данных, с которой будет работать sphinx. На запрос переиндексации соглашайтесь (Битрикс должен быть уже установлен и БД не пустая).
Включаем sphinx
Как всегда с Битрикс, есть особенности. Если модуль “Поиск” меньше версии 17.0.0 то будете получать сообщение “Ошибка подключения к серверу Sphinx: Расширение MySql не установлено”.
Ну и последнее,
Как отключить автоматический запуск меню Веб-окружения при логине
Выходим из меню веб-окружения в консоль сервера (0. Exit
). И в файле ~/.bash_profile
комментируем последнюю строку, где скрипт меню и вызывается:
—>Используемые источники:
- https://serveradmin.ru/bitrixenv-optimizacziya-nastroek-servera-pod-sajt-na-bitrix/
- https://miditator.ru/blog/1c-bitrix/nastroyka-servera-bitriks/
- https://host-consult.ru/bitriks-veb-okruzhenie/