Чёрный пояс 1С. Промышленный DevOps для 1С на Linux: от Docker до rphost | infolimp.ru

Чёрный пояс 1С. Промышленный DevOps для 1С на Linux: от коммита и безголового Docker до оркестрации rphost и борьбы с утечками памяти

1 сентября 2026 · infolimp.ru · Чёрный пояс 1С

Сквозной инженерный разбор промышленной эксплуатации 1С на Linux: как закрыть архитектурный разрыв между 1C:EDT и Конфигуратором, выстроить 5 рубежей защиты от «ложного успеха» в CI/CD, пробросить лицензии HASP и *.lic в Docker без потери привязки к железу и отличить штатный прогрев кэша rphost от утечки памяти на уровне BSL. С готовыми артефактами Infrastructure as Code (Dockerfile, сборочный скрипт, logcfg.xml, systemd-юниты) и планом перехода на промышленный DevOps за 4 недели.

Эксплуатация «1С:Предприятия 8.3» на Linux долгое время напоминала чёрную магию: хрупкие инсталляции, ручные обновления баз через RDP во внерабочее время, зависающие модальные окна в пакетном режиме Конфигуратора и рабочие процессы rphost, неконтролируемо поглощающие оперативную память вплоть до принудительного вызова OOM-killer. Когда объемы баз данных перешагивают терабайтные отметки, а бизнес требует непрерывности 24/7, эксплуатация 1С обязана превратиться в детерминированный инженерный процесс Infrastructure as Code (IaC).

Ниже собран инженерный каркас непрерывного цикла разработки, сборки и промышленной эксплуатации 1С на Linux: преодоление архитектурного разрыва форматов, защита от феномена «ложного успеха» (False Success) в CI/CD, тонкости лицензирования в контейнерах, низкоуровневая анатомия памяти rphost и безопасная оркестрация кластера без сбоев в проде.

Оглавление:
  1. Архитектурный разрыв: 1C:EDT ⇄ Конфигуратор
  2. CI/CD на Linux: 5 рубежей обороны против «Ложного успеха» (False Success)
  3. Докеризация 1С и лицензионный барьер в контейнерах
  4. Анатомия памяти 1С: rphost, rmngr и лицензионная пропасть (ПРОФ vs КОРП)
  5. Анатомия «Мёртвого кэша»: Причины утечек памяти на уровне BSL
  6. Мифы о C++ дампах памяти и настройка logcfg.xml
  7. Внешняя оркестрация: Проект AdminClusterMonitor
  8. Сборочный пакет: Готовые артефакты (IaC)
  9. План перехода на промышленный DevOps за 4 недели

1. Архитектурный разрыв: 1C:EDT ⇄ Конфигуратор

При внедрении современной инженерной культуры команды неизбежно сталкиваются с разрывом форматов: разработчики ведут работу в среде 1C:Enterprise Development Tools (EDT), фиксируя в Git дерево структурированных XML-файлов и модулей Eclipse, тогда как рантайм платформы исполняет бинарные контейнеры конфигураций (.cf) и расширений (.cfe).

Попытка использовать утилиты ring (модуль EDT CLI) или ibcmd (автономный сервер) как изолированные консольные компиляторы наталкивается на фундаментальные ограничения архитектуры платформы:

ASCII - Схема путей трансляции и компиляцииPlaintext
┌────────────────────────────────────────────────────────┐
│             Исходный код в Git (1C:EDT)                │
└───────────────────────────┬────────────────────────────┘
                            │
                            ▼ ring edt workspace export
┌────────────────────────────────────────────────────────┐
│            Каталог XML-исходников (Designer)           │
└───────────────────────────┬────────────────────────────┘
                            │
             ┌──────────────┴──────────────┐
             ▼                             ▼
┌───────────────────────────┐ ┌───────────────────────────┐
│     1cv8 DESIGNER         │ │      ibcmd (headless)     │
│ Требует: Xvfb, fonts, GUI │ │ Требует: СУБД (--data)    │
│ Разворачивает файловую БД │ │ Разворачивает таблицы БД  │
└─────────────┬─────────────┘ └─────────────┬─────────────┘
              │                             │
              └──────────────┬──────────────┘
                             ▼
┌────────────────────────────────────────────────────────┐
│      Готовый бинарный артефакт (.cf / .cfe)            │
└────────────────────────────────────────────────────────┘

Архитектурный вывод:

В экосистеме 1С отсутствует концепция бессерверного компилятора исходников. Автоматизированный CI/CD пайплайн обязан брать на себя полный цикл: трансляцию через EDT CLI, инициализацию временной файловой базы на быстром накопителе, пакетный импорт метаданных и гарантированное уничтожение временных ресурсов после сборки.

2. CI/CD на Linux: 5 рубежей обороны против «Ложного успеха» (False Success)

Пакетный режим Конфигуратора 1С под Linux коварен: процесс может упасть из-за проблем с лицензированием или содержать критические ошибки синтаксиса, но при этом вернуть операционной системе успешный код завершения 0. Механизм динамической компиляции платформы маскирует дефектный код вплоть до первого обращения пользователя в проде.

Для исключения дефектных поставок сборочный процесс должен опираться на 5 рубежей инженерной защиты:

Рубеж В чём заключается скрытая опасность Инженерное решение в пайплайне
Слой 1: Нормализация и BOM Платформа пишет лог /Out в UTF-16LE, CP1251 или UTF-8 с BOM. Поиск утилитой grep по UTF-16 в UTF-8 окружении не вернет совпадений - пайплайн завершится ложно-зеленым. Определение кодировки на лету через file -b --mime-encoding, конвертация через iconv в чистый UTF-8 и удаление маркерного байта: sed -i '1s/^\xEF\xBB\xBF//'.
Слой 2: Валидация лога При сбоях до старта ядра (сетевой разрыв, отказ службы лицензирования) лог создается с нулевым размером. Проверка пустых файлов дает вердикт «ошибок нет». Проверка размера и наличия лога [[ -s "$LOG_FILE" ]] перед парсингом. Если файл пуст - пайплайн немедленно завершается с выводом системного stderr.
Слой 3: POSIX Regex Парсинг только подстроки «Ошибка» пропускает сообщения англоязычной локали ОС или среды выполнения (Error, Expected, Undefined). Мультиязычное регулярное выражение компилятора:
"ошибка|неопознан|ожидается|не определен|error|expected|undefined|not found".
Слой 4: Изоляция сессий Параллельный запуск раннеров на общем хосте сборки приводит к взаимной перезаписи артефактов и логов. Генерация уникального RUN_ID на базе таймстемпа и генератора энтропии. Изоляция артефактов в /tmp/ и обязательный перехватчик trap cleanup EXIT.
Слой 5: Diff-верификация Успешный синтаксический контроль не гарантирует, что метаданные в СУБД эквивалентны исходникам в коммите Git. Обратная выгрузка конфигурации из БД (/DumpConfigToFiles) и рекурсивный diff -r с каталогом Git с флагом --strip-trailing-cr (исключая динамический ConfigDumpInfo.xml).
Ловушка брошенных блокировок (.1cLck): Если предыдущая сборка была прервана ядром ОС по OOM или тайм-ауту, в каталоге базы остаются файлы *.1cLck и 1Cv8.lk. Следующий запуск упадет из-за невозможности монопольного захвата базы. Перед стартом сборочный скрипт обязан проверять отсутствие активных процессов 1cv8 через pgrep и зачищать зависшие lock-файлы.

3. Докеризация 1С и лицензионный барьер в контейнерах

Развертывание сборочных агентов и серверов приложений 1С в Docker на Linux требует жесткого разделения стратегий работы с лицензиями:

Параметр Сетевой аппаратный ключ (HASP) Программные лицензии (*.lic)
Топология Выделенный сервер с HASP License Manager (порт UDP 475). Монтирование каталога /var/1C/licenses с хост-системы.
Режим сети Docker Стандартный bridge или overlay-сеть с маршрутизацией. Строго --net=host.
Риски деактивации Потеря UDP-пакетов при широковещательном broadcast-поиске. Сброс лицензии из-за генерации виртуального MAC-адреса.
Инженерное решение Монтирование преднастроенного nethasp.ini с прямым IP. Монтирование в режиме :ro, строгая фиксация hostname.

Конфигурация nethasp.ini для исключения сетевых задержек

Ini - nethasp.iniUTF-8
1[NH_COMMON]
2NH_TCPIP = Enabled
3 
4[NH_TCPIP]
5NH_SERVER_ADDR = 192.168.1.50 ; Статический IP-адрес HASP License Manager
6NH_PORT_NUMBER = 475
7NH_TCPIP_METHOD = UDP
8NH_USE_BROADCAST = Disabled ; Запрет широковещания, исключающий сетевые таймауты
Важно при работе с программными лицензиями (*.lic): Механизм защиты программной лицензии 1С рассчитывает хеш оборудования, куда входят MAC-адрес сетевого интерфейса, UUID материнской платы, BIOS и Hostname хоста. Запуск контейнера в стандартном bridge-режиме генерирует новый виртуальный сетевой интерфейс со случайным MAC-адресом, что приводит к инвалидации лицензии. Для контейнеров с программными лицензиями допустимо использовать только сетевой стек хоста: docker run --net=host -v /var/1C/licenses:/var/1C/licenses:ro ....

4. Анатомия памяти 1С: rphost, rmngr и лицензионная пропасть (ПРОФ vs КОРП)

В инженерной среде до сих пор циркулируют вредные заблуждения касательно внутреннего устройства рантайма 1С:

Лицензионный барьер управления памятью

Возможность платформы штатно перезапускать рабочие процессы без деградации пользовательских сессий зависит от уровня лицензии кластера:

ASCII - Лицензионное ветвление оркестрации памятиPlaintext
┌────────────────────────────────────────────────────────┐
│             Рост потребления памяти rphost             │
└───────────────────────────┬────────────────────────────┘
                            │
               Уровень лицензии кластера?
                            │
            ┌───────────────┴───────────────┐
            ▼                               ▼
┌───────────────────────┐       ┌───────────────────────┐
│     Лицензия КОРП     │       │     Лицензия ПРОФ     │
└───────────┬───────────┘       └───────────┬───────────┘
            │                               │
            ▼ Нативный контроль             ▼ Игнорирование настроек
┌───────────────────────┐       ┌───────────────────────┐
│ --temporary-memory-   │       │ Настройки в rac не    │
│ limit: мягкая ротация │       │ работают!             │
│ --safe-memory-usage-  │       │ Требуется внешний     │
│ per-call: срез вызова │       │ Watchdog / systemd    │
└───────────────────────┘       └───────────────────────┘

Сценарий КОРП: Нативная автоматическая ротация

Кластер уровня КОРП позволяет настроить плавный перезапуск процессов через консоль администрирования или утилиту rac:

Сценарий ПРОФ: Внешняя оркестрация и ограничения cgroups

На лицензиях ПРОФ кластер серверов игнорирует любые параметры лимитов памяти, заданные через rac или оснастку.

Попытка жестко ограничить память контейнера через Docker-параметр mem_limit (механизм Linux cgroups) приводит к тому, что ядро при достижении лимита уничтожает rphost по SIGKILL, мгновенно обрывая сотни активных транзакций. Для лицензий ПРОФ единственным безопасным решением остается внешняя оркестрация через RAS API.

5. Анатомия «Мёртвого кэша»: Причины утечек памяти на уровне BSL

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

Чек-лист типовых источников утечек памяти в 1С

  1. Пулы сеансов HTTP-сервисов и Web-сервисов.
    Сеанс сервиса после возврата ответа не уничтожается, а засыпает в пуле для повторного использования. Любые неочищенные переменные модулей и временные таблицы продолжают удерживаться в оперативной памяти до физической утилизации сеанса сервером.
  2. Временное хранилище без привязки к UUID формы.
    Вызов метода ПоместитьВоВременноеХранилище(Данные) без указания уникального идентификатора контекста связывает данные со временем жизни сеанса:
    BSL - Очистка временного хранилищаUTF-8
    1// ПРАВИЛЬНО: Привязка ко времени жизни клиентской формы
    2АдресХранилища = ПоместитьВоВременноеХранилище(ТаблицаДанных, ЭтаФорма.УникальныйИдентификатор);
    3 
    4// ПРАВИЛЬНО: Явная зачистка в фоновых заданиях и HTTP-сервисах
    5УдалитьИзВременногоХранилища(АдресХранилища);
  3. Мутабельные коллекции в параметрах кэшируемых функций.
    Передача мутабельных объектов (Массив, Структура, ТаблицаЗначений) в параметры функций общих модулей с признаком «Повторное использование возвращаемых значений» заставляет платформу рассчитывать хеш и создавать дубликаты кэша при каждой модификации переданной коллекции.
  4. Отсутствие батчинга в циклических транзакциях.
    Накопление транзакционного контекста при обработке больших массивов данных без промежуточных фиксаций приводит к разрастанию приватной памяти процесса:
    BSL - Безопасный батчинг с защитой от DeadlockUTF-8
    1РазмерПачки = 500;
    2Счетчик = 0;
    3 
    4НачатьТранзакцию();
    5Попытка
    6    Пока Выборка.Следующий() Цикл
    7        Объект = Выборка.ПолучитьОбъект();
    8        // ... Модификация объекта
    9        Объект.Записать();
    10        Счетчик = Счетчик + 1;
    11        Если Счетчик % РазмерПачки = 0 Тогда
    12            ЗафиксироватьТранзакцию(); // Сброс блокировок и буфера транзакции
    13            НачатьТранзакцию();
    14        КонецЕсли;
    15    КонецЦикла;
    16    Если ТранзакцияАктивна() Тогда
    17        ЗафиксироватьТранзакцию();
    18    КонецЕсли;
    19Исключение
    20    Если ТранзакцияАктивна() Тогда
    21        ОтменитьТранзакцию();
    22    КонецЕсли;
    23    ЗаписьЖурналаРегистрации("ПакетнаяОбработка", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    24    ВызватьИсключение;
    25КонецПопытки;
Эффект Cache Stampede: Метод ОбновитьПовторноИспользуемыеЗначения(), вызванный в продуктивной базе в разгар рабочего дня, одномоментно инвалидирует кэши всех сеансов. Сотни клиентских процессов одновременно инициируют перерасчет структур метаданных, приводя к мгновенной полке в 100% CPU на сервере приложений.

6. Мифы о C++ дампах памяти и настройка logcfg.xml

Среди системных администраторов часто встречается рекомендация настраивать генерацию полных дампов rphost через gcore или procdump -ma. На боевом сервере такой подход создает две критические проблемы:

  1. Заморозка продуктивной базы. Утилита gcore приостанавливает выполнение всех потоков процесса на время сброса страниц памяти на диск (системный вызов ptrace). Сброс дампа процесса размером 64 ГБ подвешивает базу на 30–60 секунд, вызывая лавинообразный обрыв клиентских сеансов по таймауту.
  2. Бесполезность без отладочных символов (PDB). Вендор не публикует публичные символы отладки ядра платформы. Анализ дампа в GDB или WinDbg покажет лишь адреса инструкций в скомпилированных бинарниках 1cv8 без возможности связать их с конкретным общим модулем или строкой в коде 1С. Такие дампы имеют ценность исключительно для вендора в рамках официального расследования ошибок платформы.

Для выявления тяжелых вызовов на уровне прикладного кода основным инструментом остается Технологический журнал 1С (logcfg.xml).

Фильтрация событий CALL и SCALL по объему памяти от 100 МБ помогает отлавливать тяжелые разовые вызовы, но бессильна против микроутечек (по 100 КБ за вызов), возникающих миллионы раз в сутки.

7. Внешняя оркестрация: Проект AdminClusterMonitor

Для безопасного управления рабочими процессами на лицензиях ПРОФ и предотвращения фрагментации памяти применяется метод внешней оркестрации через опрос RAS API (подход AdminClusterMonitor).

Охота на «Перестарков» (Stale Processes)

«Перестарок» - это рабочий процесс rphost, время жизни которого превысило заданный интервал (например, 24 часа), при этом количество активных соединений на нем опустилось до нуля (Connections == 0). Процесс удерживает фрагментированную память, но фактически простаивает:

ASCII - Алгоритм работы таймера ротацииPlaintext
┌────────────────────────────────────────────────────────┐
│            systemd timer (каждый час)                  │
└───────────────────────────┬────────────────────────────┘
                            │
                            ▼
┌────────────────────────────────────────────────────────┐
│      admincluster_run.sh --profile prod                │
│      Опрос RAS API / список процессов rphost           │
└───────────────────────────┬────────────────────────────┘
                            │
           Процесс старше лимита И Connections == 0?
                            │
             ┌──────────────┴──────────────┐
             ▼ ДА                          ▼ НЕТ
┌───────────────────────────┐ ┌───────────────────────────┐
│     Режим --dry-run?      │ │          Пропуск          │
└─────────────┬─────────────┘ └───────────────────────────┘
              │
     ┌────────┴────────┐
     ▼ ДА              ▼ НЕТ
┌─────────────┐ ┌───────────────────────────┐
│ Только лог  │ │ Graceful stop процесса    │
│ без килла   │ │ Отправка алерта в Telegram│
└─────────────┘ └───────────────────────────┘

Конфигурация systemd для регламентной очистки кластера

Шаблон юнита службы (/etc/systemd/system/admincluster-monitor@.service):

Ini - admincluster-monitor@.serviceUTF-8
1[Unit]
2Description=AdminClusterMonitor service for profile %i
3After=network.target
4 
5[Service]
6Type=simple
7User=usr1cv8
8Group=grp1cv8
9EnvironmentFile=/etc/admincluster/config.conf
10ExecStart=/opt/admincluster/admincluster_run.sh --profile %i
11StandardOutput=journal
12StandardError=journal
13SyslogIdentifier=admincluster-monitor-%i
14Restart=on-failure

Шаблон таймера (/etc/systemd/system/admincluster-monitor@.timer):

Ini - admincluster-monitor@.timerUTF-8
1[Unit]
2Description=Hourly trigger for AdminClusterMonitor profile %i
3 
4[Timer]
5OnBootSec=5min
6OnUnitActiveSec=1h
7Persistent=true
8 
9[Install]
10WantedBy=timers.target

8. Сборочный пакет: Готовые артефакты (IaC)

1. Промышленный Dockerfile сборочного раннера 1С

Базовый образ Ubuntu 22.04 LTS с установленными системными библиотеками шрифтов, фреймбуфером Xvfb и непривилегированным пользователем:

Dockerfile - Сборочный раннер 1СUTF-8
1FROM ubuntu:22.04
2 
3ENV DEBIAN_FRONTEND=noninteractive
4ENV LANG=ru_RU.UTF-8
5ENV LANGUAGE=ru_RU:ru
6ENV LC_ALL=ru_RU.UTF-8
7 
8# Установка системных утилит, шрифтов и графических библиотек для headless-режима
9RUN apt-get update && apt-get install -y --no-install-recommends \
10    locales ca-certificates curl file git procps \
11    xvfb xauth fontconfig dbus-x11 libwebkit2gtk-4.0-37 \
12    libgl1 libglx-mesa0 msttcorefonts \
13    && locale-gen ru_RU.UTF-8 \
14    && update-locale LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 \
15    && fc-cache -fv \
16    && rm -rf /var/lib/apt/lists/*
17 
18# Создание непривилегированного пользователя runner
19RUN groupadd -g 1001 runner \
20    && useradd -u 1001 -g runner -m -s /bin/bash runner \
21    && mkdir -p /opt/1cv8 /var/1c/db /var/1c/licenses \
22    && chown -R runner:runner /opt/1cv8 /var/1c/db /var/1c/licenses
23 
24# Установка платформы из подготовленного deb-дистрибутива
25ONBUILD COPY ./dist/*.deb /tmp/1c-dist/
26ONBUILD RUN apt-get update && (dpkg -i /tmp/1c-dist/*.deb || apt-get install -fy) \
27    && rm -rf /tmp/1c-dist /var/lib/apt/lists/*
28 
29USER runner
30WORKDIR /home/runner
31ENV DISPLAY=:99
32 
33CMD ["/bin/bash"]

2. Скрипт сборки и синтаксического контроля (1c-ci-linux-build-v4.sh)

Промышленный скрипт автоматизации со всеми 5 рубежами защиты, безопасной очисткой файловых дескрипторов и Telegram-уведомлениями:

Bash - 1c-ci-linux-build-v4.shUTF-8
1#!/usr/bin/env bash
2set - euo pipefail
3 
4PATH_1C="/opt/1cv8/x86_64/current/1cv8"
5DB_CONNECTION=""; DB_USER="Admin"; DB_PASS=""; EXT_NAME=""
6TIMEOUT_LIMIT=300; SRC_DIR=""
7RUN_ID=$(date +%Y%m%d_%H%M%S)_$RANDOM
8LOG_FILE="/tmp/1c_log_${RUN_ID}.txt"; ERR_FILE="/tmp/1c_err_${RUN_ID}.txt"
9ERR_PATTERN="ошибка|неопознан|ожидается|не определен|несоответств|не найден|неверн|error|expected|undefined|mismatch|not found|invalid|failed"
10 
11cleanup() { rm -f "$LOG_FILE" "$ERR_FILE" /tmp/diff_result_${RUN_ID}.txt; }
12trap cleanup EXIT
13 
14# Зачистка зависших блокировок .1cLck
15if [[ "$DB_CONNECTION" =~ ^/[Ff]"?([^"]+) ]] && ! pgrep -f "1cv8" >/dev/null; then
16    rm -f "${BASH_REMATCH[1]}"/*.1cLck "${BASH_REMATCH[1]}"/1Cv8.lk 2>/dev/null || true
17fi
18 
19CMD_ARGS="DESIGNER $DB_CONNECTION /N \"$DB_USER\" /P \"$DB_PASS\" /CheckModules -Server -ThinClient -WebClient /Out \"$LOG_FILE\" -NoTruncate"
20[[ -n "$EXT_NAME" ]] && CMD_ARGS="$CMD_ARGS -Extension \"$EXT_NAME\""
21 
22set +e
23timeout --preserve-status "$TIMEOUT_LIMIT" "$PATH_1C" $CMD_ARGS 2> "$ERR_FILE"
24STATUS=$?; set -e
25[[ $STATUS -ne 0 ]] && { echo "[-] Сбой платформы ($STATUS)"; exit "$STATUS"; }
26 
27# Слой 2: Проверка размера лога
28[[ ! -s "$LOG_FILE" ]] && { echo "[-] Лог пуст. Падение Конфигуратора."; exit 100; }
29 
30# Слой 1: Нормализация кодировки и удаление BOM
31MIME=$(file -b --mime-encoding "$LOG_FILE")
32[[ "$MIME" != "utf-8" && "$MIME" != "us-ascii" ]] && iconv -f "$MIME" -t UTF-8 "$LOG_FILE" -o "${LOG_FILE}.tmp" && mv -f "${LOG_FILE}.tmp" "$LOG_FILE"
33sed -i '1s/^\xEF\xBB\xBF//' "$LOG_FILE"
34 
35# Слой 3: Поиск ошибок синтаксиса
36if grep - Eiq "$ERR_PATTERN" "$LOG_FILE"; then
37    echo "[-] Ошибки синтаксиса в модулях!"; exit 1
38fi
39 
40# Слой 5: Diff-контроль метаданных с Git
41if [[ -n "$SRC_DIR" && -d "$SRC_DIR" ]]; then
42    TMP_DUMP="/tmp/dump_${RUN_ID}"; mkdir -p "$TMP_DUMP"
43    "$PATH_1C" DESIGNER $DB_CONNECTION /N "$DB_USER" /P "$DB_PASS" /DumpConfigToFiles "$TMP_DUMP" -Extension "$EXT_NAME" >/dev/null
44    diff -r --strip-trailing-cr -x "ConfigDumpInfo.xml" -x "*.orig" "$SRC_DIR" "$TMP_DUMP" > /tmp/diff_result_${RUN_ID}.txt || { echo "[-] Diff Error!"; exit 2; }
45    rm -rf "$TMP_DUMP"
46fi
47 
48echo "[+] Сборка успешно завершена."
49exit 0

3. Оптимизированный logcfg.xml для продуктивной среды

Файл технологического журнала, настроенный на отслеживание тяжелых контекстных вызовов памяти, взаимных блокировок и формирования минидампов:

XML - logcfg.xmlUTF-8
1<?xml version="1.0" encoding="UTF-8"?>
2<config xmlns="http://v8.1c.ru/v8/tech-log">
3    <dump create="true" location="/var/1c/dumps" type="3" prntscr="false"/>
4    <log location="/var/log/1c_tech_log" history="48">
5        <event><eq property="Name" value="CALL"/><gt property="Memory" value="104857600"/></event>
6        <event><eq property="Name" value="SCALL"/><gt property="Memory" value="104857600"/></event>
7        <event><eq property="Name" value="DBPOSTGRS"/><gt property="Memory" value="52428800"/></event>
8        <event><eq property="Name" value="DBPOSTGRS"/><gt property="Duration" value="5000000"/></event>
9        <event><eq property="Name" value="TLOCK"/><gt property="WaitConnections" value="0"/></event>
10        <event><eq property="Name" value="TDEADLOCK"/></event>
11        <event><eq property="Name" value="EXCP"/></event>
12        <properties>
13            <property name="p:processName"/><property name="t:connectID"/><property name="SessionID"/>
14            <property name="Usr"/><property name="Memory"/><property name="MemoryPeak"/><property name="Duration"/>
15            <property name="Context"/><property name="Sql"/><property name="WaitConnections"/><property name="Exception"/><property name="Descr"/>
16        </properties>
17    </log>
18</config>

9. План перехода на промышленный DevOps за 4 недели

Переход на промышленный конвейер снимает с команды груз рутинных инцидентов: процесс сборки становится строго детерминированным, а жизненный цикл и память процессов сервера 1С берутся под полный инженерный контроль с помощью прозрачных системных инструментов Linux. Представленные конфигурации и скрипты образуют production-ready фундамент для внедрения зрелого DevOps в enterprise-инфраструктуре.