Почему на сервере 1С:Предприятия возникает неисправимая ошибка и как ее исправить?

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

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

Давайте вместе разберем эту ситуацию, проанализируем предоставленные данные и выработаем комплексный план по диагностике и устранению проблемы. В нашем случае используется конфигурация УТ 11.4.10.62 на платформе 8.3.26.1581, сервер работает под управлением Linux, а в качестве СУБД используется PostgreSQL 14.

Анализ сообщения об ошибке и общие данные

Прежде всего, внимательно рассмотрим предоставленный отчет об ошибке. Он содержит множество ценной информации:

Судя по характеру ошибки и зависаниям, мы имеем дело с проблемой, которая затрагивает сам кластер серверов 1С или СУБД, а не только отдельного пользователя.

Диагностика и возможные причины проблемы

Давайте теперь рассмотрим потенциальные причины данной неисправимой ошибки и методы их диагностики, начиная с наиболее вероятных.

Несовместимость платформы и конфигурации

Мы обратили внимание, что конфигурация УТ 11.4.10.62 работает на платформе 8.3.26.1581, но при этом ее режим совместимости установлен на 8.3.12. Это критически важный аспект. Режим совместимости указывает, с какой минимальной версией платформы конфигурация гарантированно работает. Если этот режим значительно ниже текущей платформы, это может приводить к неожиданным эффектам и ошибкам, поскольку более новая платформа может выполнять код, написанный для старого режима, не так, как ожидалось.

  1. Проанализируйте режим совместимости: Убедитесь, что конфигурация УТ 11.4.10.62 действительно требует режима 8.3.12. Для современных релизов УТ 11.4 обычно рекомендуются более новые режимы совместимости, которые соответствуют актуальным версиям платформы.
  2. Обновление конфигурации: Если есть возможность, обновите конфигурацию УТ до более актуального релиза. Зачастую, при обновлении конфигурации, режим совместимости также автоматически повышается до рекомендованного разработчиком, что может устранить внутренние конфликты.
  3. Повышение режима совместимости: Если обновление конфигурации невозможно, рассмотрите возможность повышения режима совместимости вручную (через конфигуратор, меню «Конфигурация» — «Свойства» — «Режим совместимости»). Однако это следует делать с крайней осторожностью и только после полного тестирования на копии базы, так как это может привести к появлению синтаксических ошибок или изменению логики работы существующих механизмов.

Проблемы с платформой 8.3.26

Фактор, который нельзя игнорировать: представители фирмы "1С" в своих облачных сервисах "1С:Фреш" активно используют версии платформ 8.3.25, 8.3.27 и даже 8.5.1, но практически не задействуют 8.3.26. Это может косвенно указывать на то, что платформа 8.3.26 имеет меньшую стабильность или содержит известные ошибки, которые были исправлены в последующих релизах. Несмотря на то, что в версии 8.3.26 были улучшения, например, связанные со стабильностью видеозвонков, общее впечатление о ее стабильности может быть неоднозначным.

  1. Рассмотрите обновление платформы: Если проблема не будет решена другими методами, мы настоятельно рекомендуем рассмотреть переход на более новую и, возможно, более стабильную версию платформы, например 8.3.27 или одну из 8.5.x. Перед обновлением обязательно изучите список изменений и исправленных ошибок для выбранной версии платформы.

Недостаток или утечки памяти

Одна из наиболее распространенных причин "неисправимых ошибок" и зависаний в системах 1С:Предприятия — это проблемы с памятью. Это может быть как банальная нехватка физической оперативной памяти на сервере, так и утечки памяти в процессах 1С или PostgreSQL, а также неэффективное использование памяти.

  1. Диагностика утечек и нехватки памяти:
    • Даже если сервер имеет большой объем RAM, проблема может быть в том, как 1С или PostgreSQL используют эту память.
    • Неоптимальные запросы в коде конфигурации (или расширений) могут приводить к чрезмерному потреблению памяти на сервере, что в итоге вызывает падение процесса rserver.
    • Настройте мониторинг потребления памяти на сервере Linux, используя мониторинг потребления ресурсов базами кластеров сервера. Используйте утилиты типа htop, top, free -h, чтобы отслеживать потребление памяти процессами ragent, rhost, rmngr и postgres. Обращайте внимание на пиковые значения и тенденции роста потребления памяти перед возникновением ошибки.
  2. Счетчики и ограничения потребления ресурсов 1С:
    • В кластере серверов 1С существуют встроенные механизмы, такие как "Счетчики потребления ресурсов" и "Ограничения потребления ресурсов". Они позволяют прерывать серверные вызовы, если они превышают установленные лимиты по оперативной памяти. Эти механизмы предназначены для защиты кластера от критических перегрузок, но также могут быть причиной прерывания работы пользователя.
    • Проверьте настройки этих счетчиков и ограничений в консоли администрирования серверов 1С. Возможно, значения слишком низки, и процесс прерывается до того, как успевает завершиться, что приводит к ошибке.
  3. Проблемы с 32-разрядным кластером (хоть у вас и 64-битный):
    • Важно убедиться, что вы используете именно 64-разрядную версию платформы 1С для Linux (что и подтверждается отчетом Linux_x86_64). 32-разрядные процессы ограничены в использовании памяти (обычно до 3.8 Гб на процесс), что часто приводит к падениям при интенсивной работе. В вашем случае платформа 64-битная, что исключает это как прямую причину, но подтверждает, что проблемы с памятью могут быть связаны с ее утечками или неэффективным использованием, а не с архитектурными ограничениями процесса.

Настройки PostgreSQL на Linux

PostgreSQL на Linux требует очень тщательной настройки для оптимальной работы с 1С. Дефолтные настройки СУБД совершенно не подходят для промышленной эксплуатации и могут быть источником низкой производительности и нестабильности.

  1. Оптимизация параметров postgresql.conf:
    • Отключение энергосбережения: Убедитесь, что на сервере Linux и для PostgreSQL отключены все функции энергосбережения, которые могут замедлять работу дисковой подсистемы или процессора.
    • Запрет своппинга разделяемой памяти: Важно запретить операционной системе выгружать разделяемую память PostgreSQL в своп. Это можно сделать, например, установкой параметра vm.swappiness = 1 (или 0) в /etc/sysctl.conf и transparent_hugepages=never.
    • Основные параметры: Обратите внимание на следующие параметры в файле postgresql.conf:
      • shared_buffers: Рекомендуется устанавливать в четверть от объема ОЗУ сервера (RAM/4). Например, если у сервера 64 Гб ОЗУ, то shared_buffers = 16GB.
      • work_mem: Память, используемая для внутренних операций сортировки и хеширования. Рекомендуется 32MB или 64MB, но может потребоваться подбор.
      • maintenance_work_mem: Память для операций VACUUM, REINDEX, CREATE INDEX. Обычно 256MB или 512MB.
      • max_connections: Максимальное количество одновременных подключений. Должно быть достаточным для всех сеансов 1С, плюс системные соединения.
      • max_files_per_process: Максимальное количество файлов, которые может открыть процесс. Рекомендуется увеличить до 2000 или 4000.
      • max_parallel_workers: Количество фоновых процессов, которые могут быть использованы для параллельных запросов.
      • autovacuum_vacuum_cost_limit: Лимит стоимости автовакуума.
      • wal_buffers, checkpoint_timeout, max_wal_size, min_wal_size: Параметры журнала предзаписи (WAL), влияющие на производительность записи.
    • После изменения postgresql.conf необходимо перезапустить службу PostgreSQL.
  2. Локаль: Проверьте корректность настройки русскоязычной локали на сервере Linux. Некорректная локаль может вызывать ошибки при работе с текстовыми данными в 1С, создании баз данных или временных таблиц. Убедитесь, что установлена и правильно используется локаль ru_RU.UTF-8.
  3. Обслуживание баз данных: Регулярное обслуживание баз данных PostgreSQL крайне важно:
    • Чистка (vacuumdb): Регулярный VACUUM FULL или, при активной работе, VACUUM и ANALYZE (автовакуум должен быть включен и настроен). Это предотвращает разрастание таблиц и потерю производительности.
    • Перестройка индексов (reindexdb): В случае сильной фрагментации индексов может потребоваться их перестройка.

Большое количество расширений

В вашем отчете мы видим, что используется 22 расширения. Это довольно много. Каждое расширение — это дополнительный код, который может содержать ошибки или конфликтовать с другими расширениями, особенно если они пытаются модифицировать одни и те же объекты метаданных.

  1. Аудит расширений:
    • Проанализируйте каждое расширение: для чего оно нужно, насколько оно актуально и совместимо с вашей версией конфигурации и платформы.
    • По возможности, отключите часть расширений по очереди (на тестовой базе), чтобы локализовать возможное проблемное расширение.
    • Обратите внимание на расширения-исправления. Они разрабатываются под конкретные версии и могут перестать корректно работать после обновления конфигурации или платформы, если сами не были обновлены.

Проблемы с оборудованием или ОС сервера

Зависания и "неисправимые ошибки" также могут быть вызваны проблемами с серверным оборудованием или некорректной настройкой операционной системы Linux.

  1. Мониторинг ресурсов сервера:
    • Настройте постоянный мониторинг всех критически важных ресурсов сервера: процессор, оперативная память, дисковая подсистема (скорость ввода/вывода, ошибки), сетевые адаптеры. Используйте Zabbix, Prometheus или аналогичные системы.
    • Особое внимание уделите логам ОС Linux (/var/log/syslog, dmesg) на предмет ошибок памяти, дисковых ошибок или сообщений о нехватке ресурсов.
    • Проверьте, нет ли на сервере стороннего ПО или служб, которые могут конфликтовать с 1С или PostgreSQL, либо потреблять чрезмерные ресурсы.
    • Убедитесь, что энергосберегающие режимы для процессора или дисков на уровне BIOS/UEFI или ОС отключены, поскольку они могут негативно сказываться на производительности и стабильности.

Отсутствие технологического журнала (ТЖ)

Администраторы отключили технологический журнал "для экономии места". Это серьезная ошибка, так как технологический журнал является важнейшим инструментом для диагностики любых проблем в кластере 1С. Он фиксирует подробную информацию о событиях на сервере, включая контекст возникновения исключений, идентификаторы потоков, параметры вызовов, потребление ресурсов и многое другое. Без ТЖ диагностика "неисправимой ошибки" становится практически невозможной.

  1. Включите технологический журнал:
    • Немедленно включите технологический журнал на сервере 1С.
    • Настройте его сбор так, чтобы он не переполнял диск (например, ротация логов по размеру или времени). Место, которое он занимает, несоизмеримо с пользой от него при диагностике критических проблем.
    • Файл настройки ТЖ logcfg.xml позволяет гибко регулировать, какие события и с какой детализацией записывать. Начните с базового набора событий (EXCP, DBMSSQL, CALL, MEM, SESN) и при необходимости расширяйте его.
    • После возникновения ошибки проанализируйте логи ТЖ с помощью утилит типа "Консоль технологического журнала" или текстовыми редакторами. Ищите события EXCP, DBMSSQL, а также внезапные завершения сеансов или процессов rhost.

Анализ дампов

При аварийном завершении процессов 1С (rserver, rhost, ragent) система может формировать файлы дампов (.dmp). Эти файлы содержат "снимок" состояния процесса в момент краха, включая стек вызовов, состояние памяти и регистров процессора.

  1. Проверьте наличие дампов: На сервере Linux дампы могут находиться в каталоге установки сервера 1С или в системных каталогах для крэш-дампов (например, /var/crash).
  2. Анализ дампов:
    • Для детального анализа дампов требуется глубокое знание ассемблера или байт-кода процессоров, а также доступ к отладочным символам (.pdb-файлам), которые есть только у фирмы "1С".
    • Если вы не обладаете такими знаниями, соберите файлы дампов и стек вызовов и обратитесь в техническую поддержку 1С. Специалисты 1С могут проанализировать эти данные и предоставить более точную причину ошибки.

Несовпадение версий клиента и сервера

Хотя в вашем случае версии платформы на клиенте и сервере совпадают (8.3.26.1581), важно помнить, что несовпадение версий может быть частой причиной ошибок соединения и работы. Всегда следите за тем, чтобы клиентские и серверные компоненты 1С работали под одной и той же версией платформы.

Ошибки соединения с сервером

Проблемы со связью между клиентом, сервером 1С и сервером PostgreSQL могут вызывать "неисправимые ошибки".

  1. Проверка сети: Убедитесь в стабильности сетевого соединения между всеми компонентами.
  2. Настройки SQL-сервера: Проверьте, что PostgreSQL доступен по сети, и что на нем не менялись параметры аутентификации или адрес.
  3. Кэш кластера и пользователя: В некоторых случаях помогает очистка кэша сервера 1С и кэша пользователя USR1CV8.

Комплексные рекомендации по устранению ошибки

Для эффективного решения проблемы мы рекомендуем выполнять действия поэтапно, от наиболее простых и очевидных к более сложным. Не забывайте о тестировании после каждого шага.

  1. Включите технологический журнал (ТЖ) и настройте мониторинг: Это ваш первый и самый важный шаг. Без ТЖ диагностика будет гаданием на кофейной гуще. Настройте ротацию, чтобы избежать переполнения диска. Параллельно настройте мониторинг ресурсов сервера Linux.
  2. Проверьте и оптимизируйте настройки PostgreSQL:
    • Тщательно изучите и примените рекомендации по настройке postgresql.conf для работы с 1С (особое внимание shared_buffers, work_mem, maintenance_work_mem).
    • Убедитесь в корректности настройки локали ru_RU.UTF-8.
    • Настройте регулярное обслуживание БД (VACUUM, ANALYZE, при необходимости REINDEX).
  3. Проанализируйте режим совместимости конфигурации: Убедитесь, что УТ 11.4.10.62 корректно работает с режимом 8.3.12 на платформе 8.3.26. Рассмотрите возможность обновления конфигурации до актуальной версии для автоматического повышения режима совместимости.
  4. Обновите платформу 1С:Предприятия: Рассмотрите переход на более стабильную и актуальную версию платформы, например 8.3.27 или 8.5.x. Предварительно изучите список изменений и совместимость.
  5. Проведите аудит расширений: Временно отключите все расширения на тестовой базе и проверьте стабильность. Затем включайте их по одному или группами, чтобы выявить потенциально проблемное расширение.
  6. Проверьте аппаратное обеспечение и ОС сервера:
    • Изучите системные логи Linux на предмет аппаратных ошибок (память, диски).
    • Убедитесь, что все функции энергосбережения отключены.
  7. Анализ дампов и обращение в техподдержку 1С: Если после всех предыдущих шагов проблема останется, соберите дампы процессов 1С и ТЖ-логи, а затем обратитесь в службу технической поддержки 1С. Они смогут провести глубокий анализ дампов с использованием внутренних отладочных символов.

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

← На главную