Почему процесс dbda падает с ошибкой 'trap invalid opcode' на сервере 1С:Предприятия на Linux и как это исправить?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При развертывании сервера 1С:Предприятия на операционных системах Linux, таких как Astra Linux, Ubuntu 20.04 или Ubuntu 22.04, пользователи могут столкнуться с проблемой, когда процесс dbda, являющийся компонентом сервера 1С, постоянно запускается и сразу же падает с ошибкой "trap invalid opcode". Эта проблема особенно актуальна для платформ 1С версии 8.3.23.1739 и других релизов из ветки 8.3.23. В этом руководстве мы подробно рассмотрим причины возникновения данной ошибки, а также предложим несколько решений, начиная от временных обходных путей до штатных настроек платформы 1С.

Введение: Понимание проблемы "trap invalid opcode" в dbda на Linux

Когда мы запускаем сервер 1С:Предприятия, агент сервера (ragent) инициирует работу различных служебных процессов, одним из которых является dbda. В случае возникновения проблемы, мы можем наблюдать в системных журналах (например, через команду dmesg или в /var/log/syslog) записи, аналогичные следующим:


Oct 28 07:30:02 razrab1 kernel: [2086386.895464] traps: dbda[4079047] trap invalid opcode ip:526710 sp:7ffc0c8c8558 error:0 in dbda[400000+4acb000]
Oct 28 07:30:02 razrab1 kernel: [2086386.900857] traps: dbda[4079052] trap invalid opcode ip:526710 sp:7ffdd26a4308 error:0 in dbda[400000+4acb000]
...

Эти сообщения указывают на "trap invalid opcode", что означает попытку выполнения процессором неизвестной или недопустимой инструкции. В данном контексте, наиболее вероятная причина кроется в том, что исполняемый файл dbda был скомпилирован с использованием современных инструкций процессора, таких как AVX (Advanced Vector Extensions). Если сервер, на котором мы разворачиваем 1С, использует старый процессор или является виртуальной машиной, которая не эмулирует или не предоставляет поддержку этих инструкций, то при попытке их выполнения процесс dbda аварийно завершается.

Хотя сервер 1С, как правило, продолжает функционировать даже с этими ошибками, они засоряют логи, постоянно перезапускают процесс dbda и могут создавать временные файлы в директории /tmp. Нам необходимо избавиться от этих ошибок для стабильной и чистой работы системы.

Временное решение: Отключение файла dbda

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

Для этого мы выполним следующую команду в терминале сервера:


chmod -x /opt/1cv8/x86_64/8.3.23.1739/dbda

В этой команде /opt/1cv8/x86_64/8.3.23.1739/dbda представляет собой полный путь к исполняемому файлу dbda. Обратите внимание, что путь может незначительно отличаться в зависимости от версии платформы 1С, которую мы используем. После выполнения этой команды компонент dbda перестанет запускаться. По нашему опыту, в большинстве случаев это не влияет на основную работу 1С, если функциональность Дата акселератора не используется активно.

Штатное решение: Использование Требований назначения функциональности (ТНФ)

Наиболее корректным и рекомендованным разработчиками 1С способом решения проблемы с dbda является настройка Требований назначения функциональности (ТНФ) в кластере серверов 1С:Предприятия. Этот механизм позволяет нам гибко управлять тем, какие сервисы и объекты требований будут запускаться на определенных рабочих серверах кластера.

Что такое Дата акселератор и почему его отключают?

Прежде чем приступить к отключению, давайте разберемся, что такое dbda, или Дата акселератор. Это специализированная СУБД, встроенная в сервер 1С:Предприятия, предназначенная для ускорения выполнения сложных аналитических отчетов. Он работает по принципу In-Memory Data Processing, то есть хранит и обрабатывает данные непосредственно в оперативной памяти компьютера. Дата акселератор оптимизирован для OLAP-запросов и агрегации данных, что позволяет значительно повысить производительность при работе с большими объемами информации.

Для работы Дата акселератора предъявляются строгие требования:

  1. Лицензия КОРП: Для использования функциональности Дата акселератора необходима соответствующая лицензия КОРП. Без нее его запуск нецелесообразен.
  2. Процессор: Требуется процессор с архитектурой Intel Haswell или AMD Piledriver и новее, имеющий не менее двух физических ядер. Именно здесь кроется наша проблема с "trap invalid opcode", так как эти процессоры поддерживают инструкции AVX.
  3. Оперативная память: Дата акселератор активно использует ОЗУ. Рекомендуется иметь запас оперативной памяти в 1,5–2 объема загружаемых данных из 1С, плюс дополнительно 5 ГБ. Например, для Windows-сервера рекомендовано 64 ГБ ОЗУ и файл подкачки не менее 512 ГБ.
  4. Версия платформы: Сервис недоступен при использовании режима совместимости платформы 8.3.13 и ниже.

Мы отключаем Дата акселератор, если он не используется в нашей конфигурации 1С, если у нас нет необходимой лицензии КОРП, или если наш сервер не соответствует аппаратным требованиям, что и приводит к ошибке "trap invalid opcode".

Пошаговая настройка ТНФ для запрета запуска Дата акселератора во всем кластере

Чтобы полностью запретить использование Дата акселератора во всем кластере серверов 1С, нам необходимо выполнить следующие действия. Порядок расположения требований имеет критическое значение, поэтому мы должны строго следовать приведенной последовательности:

  1. Настройка на любом рабочем сервере (главном менеджере кластера):

    Мы открываем консоль администрирования серверов 1С и переходим к настройкам нашего кластера. Здесь мы создадим два требования:

    • Требование 1: Общее разрешение
      • Объект требований: Любой объект требований
      • Тип требования: Назначать
      • Имя ИБ: (не указывается)
      • Значение дополнительного параметра: (не указывается)

      Это требование служит общим разрешением на запуск любых сервисов на данном рабочем сервере. Оно должно быть первым, чтобы обеспечить корректную работу других необходимых служб.

    • Требование 2: Запрет Дата акселератора
      • Объект требований: Сервис Дата акселератора
      • Тип требований: Не назначать
      • Имя ИБ: (не указывается)
      • Значение дополнительного параметра: (не указывается)

      Это требование конкретно запрещает запуск сервиса Дата акселератора. Поскольку оно идет после общего разрешения, оно переопределяет его только для dbda.

  2. Настройка на каждом из оставшихся рабочих серверов (дополнительных менеджерах):

    На каждом из других рабочих серверов в кластере (если они существуют), мы добавим только одно требование:

    • Требование 3: Запрет Дата акселератора
      • Объект требований: Сервис Дата акселератора
      • Тип требований: Не назначать
      • Имя ИБ: (не указывается)
      • Значение дополнительного параметра: (не указывается)

      Это требование явно запрещает запуск Дата акселератора на этих серверах.

После применения этих настроек, сервер 1С должен перестать пытаться запускать dbda, и ошибки "trap invalid opcode" исчезнут из системных журналов.

Особенности настройки ТНФ при наличии отдельного сервера лицензирования

В более сложных конфигурациях, когда у нас есть выделенный сервер лицензирования, нам необходимо учесть его при настройке ТНФ. Проблема заключается в том, чтобы корректно совместить запрет на запуск Дата акселератора с уже существующими требованиями для сервиса лицензирования. Давайте рассмотрим типовой сценарий.

Настройка ТНФ для Рабочего Сервера:

Если наш "Рабочий Сервер" является основным для клиентских подключений и обработки данных, но не для лицензирования, его настройка ТНФ будет выглядеть следующим образом. Мы должны обеспечить, чтобы он не запускал сервис лицензирования, но при этом работал со всеми остальными необходимыми службами, исключая Дата акселератор.

  1. Клиентские соединения:
    • Объект требования: Клиентское соединение с ИБ
    • Тип требования: Назначать
    • Для кого: Для всех

    Это первое требование позволяет рабочему серверу обрабатывать клиентские подключения к информационным базам.

  2. Запрет сервиса лицензирования:
    • Объект требования: Сервис лицензирования
    • Тип требования: Не назначать
    • Для кого: Для всех

    Это требование явно указывает, что данный сервер не должен обрабатывать запросы на выдачу лицензий.

  3. Общее разрешение для остальных сервисов:
    • Объект требования: Любой объект требования
    • Тип требования: Назначать
    • Для кого: Для всех

    Это общее разрешение обеспечивает запуск всех остальных необходимых сервисов 1С на этом сервере.

  4. Запрет Дата акселератора:
    • Объект требования: Сервис Дата акселератора
    • Тип требования: Не назначать
    • Для кого: Для всех

    Наконец, мы добавляем конкретный запрет на запуск Дата акселератора, который переопределит общее разрешение для данного сервиса.

Настройка ТНФ для Сервера Лицензирования:

На выделенном "Сервере Лицензирования" основная задача — обрабатывать запросы на лицензии. В идеале, dbda там не должен запускаться. Однако, если мы видим в консоли запуск dbda и падения ragent, как это было в сообщениях форума, нам нужно явно запретить его.

  1. Назначение сервиса лицензирования:
    • Объект требования: Сервис лицензирования
    • Тип требования: Назначать
    • Для кого: Для всех

    Это первое требование предписывает серверу обрабатывать лицензии.

  2. Общий запрет на все прочее:
    • Объект требования: Любой объект требования
    • Тип требования: Не назначать
    • Для кого: Для всех

    Мы можем использовать это требование для того, чтобы сервер лицензирования не занимался ничем, кроме выдачи лицензий. Однако, если мы видим, что dbda все равно пытается запуститься (как в случае, описанном автором), это может указывать на то, что сервис лицензирования каким-то образом инициирует его или это поведение является не до конца контролируемым.

  3. Явный запрет Дата акселератора (если требуется):
    • Объект требования: Сервис Дата акселератора
    • Тип требования: Не назначать
    • Для кого: Для всех

    Если, несмотря на общее "Не назначать", dbda продолжает создавать проблемы, мы можем добавить это требование явным образом. В сообщении 11 автор упоминает, что "Не подходит" с такой конфигурацией, что может указывать на специфические сложности или баги в версиях платформы или специфике развертывания. В таких случаях может потребоваться дополнительный анализ или обновление платформы.

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

Дополнительные рекомендации и диагностика

Анализ причин ошибки "trap invalid opcode" и поддержка AVX

Мы выяснили, что ошибка "trap invalid opcode" в dbda с высокой вероятностью связана с компиляцией программного обеспечения 1С с оптимизациями под набор инструкций AVX (Advanced Vector Extensions), AVX2 или другие, которые отсутствуют на целевом процессоре сервера. Эти инструкции значительно повышают производительность при параллельных вычислениях, но требуют аппаратной поддержки.

Если мы сталкиваемся с такой ошибкой, нам следует проверить характеристики процессора нашего сервера. Мы можем использовать команды, такие как lscpu | grep flags или cat /proc/cpuinfo | grep avx, чтобы убедиться в наличии поддержки AVX. Если AVX отсутствует, это подтверждает нашу гипотезу. В таких случаях, помимо отключения dbda, мы можем рассмотреть следующие варианты:

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

Мониторинг и диагностика системных и технологических журналов

Для глубокого анализа причин падений сервисов на Linux, включая dbda, нам необходимо активно использовать системные и технологические журналы:

  1. Системные журналы: Мы должны регулярно проверять dmesg для сообщений ядра (kernel traps) и syslog или journalctl -xe для общих системных событий, связанных с падением процесса.
  2. Core-файлы: Если при падении процесса создаются core-файлы, мы можем использовать утилиты отладки, такие как gdb, для их анализа. Это может дать ценную информацию о стеке вызовов и состоянии программы в момент аварии.
  3. Технологический журнал 1С: Для более детального понимания работы Дата акселератора и выявления проблем, мы можем настроить технологический журнал 1С. В конфигурации технологического журнала мы можем включить события, относящиеся к компоненту DBDA, что позволит нам отслеживать его активность, ошибки и потребление ресурсов.

Требования к аппаратным ресурсам

Как мы уже упоминали, Дата акселератор крайне требователен к ресурсам. Недостаток оперативной памяти или низкая производительность процессора могут приводить к ошибкам, даже если AVX поддерживается. Мы должны убедиться, что сервер, на котором планируется работа Дата акселератора, имеет:

Нехватка ресурсов может проявляться ошибками при обновлении копии данных для акселератора или при выполнении запросов, даже если сам сервис не падает с "invalid opcode".

Влияние версии платформы 1С

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

Альтернативные подходы к развертыванию Дата акселератора

В некоторых случаях, когда мы не можем решить проблемы с dbda на Linux-сервере (например, из-за специфических аппаратных ограничений или сложностей с настройкой ТНФ в комплексной среде), мы можем рассмотреть альтернативный подход: вынос сервиса Дата акселератора на отдельную виртуальную машину. Например, мы можем развернуть его на VM под управлением Windows Server, где у нас может быть больше контроля над аппаратными ресурсами и менее вероятны проблемы с поддержкой инструкций процессора. Это позволит нам изолировать проблему и использовать функциональность Дата акселератора без влияния на основной сервер 1С на Linux.

Выбирая этот подход, мы должны обеспечить достаточный объем ОЗУ и другие необходимые ресурсы на выделенной VM, а также корректно настроить сетевое взаимодействие между серверами.

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

← На главную