Скин на НГ, перетяжка
Скин на НГ, перетяжка
Скин на НГ, перетяжка

Расследование ошибки нехватки памяти на сервере 1С

Аватарка пользователя Alexander Rudnitsky
Отредактировано

Автор рассказывает, почему возникают ошибки системы «1С: Предприятие 8.3» из-за нехватки памяти, и рассматривает пример диагностики эпизода.

28К открытий36К показов

Ошибка системы «1С: Предприятие 8.3» из-за нехватки памяти — постоянный спутник администратора 1С. Разбираемся, из-за чего они возникают, и рассматриваем пример диагностики одного подобного эпизода из практики администрирования сервера 1С.

Природа проблемы

Сообщение «Недостаточно памяти» — одна из самых часто встречающихся ошибок при работе с 1С: Предприятие версии 8.3 и выше. Она происходит по самым разным причинам — от обработки системой нескольких массивных файлов и загрузки больших объёмов данных, до обновления ПО и перегрузки ресурсов при формирования сложных отчётов.

Она не так критична при возникновении на клиентском компьютере, а вот если сообщение об ошибке выдает сервер 1С, нужно отнестись к этому максимально внимательно. Это тот самый случай, когда очень важно установить правильный «диагноз» — то есть решения не будет, пока ответственный администратор не распознает источник проблемы, не поймёт её природу.

Проблема может заключаться в несвоевременном завершении процессов, запускаемых различным ПО. Они накапливаются и перегружают доступный объём памяти на сервере. Также может иметь место интенсивная работа различных программ с постоянным резервированием и освобождением ресурсов памяти.

Приведу пример расследования одной подобной ошибки из своей практики.

Инцидент

Поступило обращение со следующей ошибкой:

Расследование ошибки нехватки памяти на сервере 1С 1

Смотрим журнал регистрации, там так же выводится ошибка с пояснением о нехватке памяти на сервере:

Расследование ошибки нехватки памяти на сервере 1С 2

Настроив технологический журнал (ТЖ) системы 1С с событием EXCP — EXCPCNTX обнаруживаем запись:

Ошибка СУБД out of memory for query result

То есть, обе ошибки сообщают о проблеме объёма памяти, на основании чего нашим главным подозреваемым становится код конфигурации (возможно наличие неоптимальных запросов).

Находим код конфигурации, вызывающий ошибку.

В журнале регистрации указан следующий код:

			{ОбщийМодуль.ДокументооборотСКОВызовСервера.Модуль(22)}: Ошибка при вызове метода контекста (Получить)
по причине:

Недостаточно памяти для получения результата запроса к базе данных
		

Открываем конфигуратор и переходим в указанный модуль к указанному номеру строки кода:

Расследование ошибки нехватки памяти на сервере 1С 3

Строка, на которой произошла ошибка:

			ВнешниеОбъектыХранилище = Константы.ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль;
ДвоичныеДанныеОбработки = ВнешниеОбъектыХранилище.Получить().Получить();
		

Смотрим тип объекта (константы), к которой идёт обращение:

Расследование ошибки нехватки памяти на сервере 1С 4

Итак, в конфигурации есть константа:

			ДокументооборотСКонтролирующимиОрганами_ВнешнийМодуль
		

Она хранит в базе что-то неструктурированное (двоичные данные), что может занимать значительный объём памяти.

Проверяем, какой объем данных фактически занимает константа. Для этого узнаем имя таблицы хранения в базе PostgreSQL — таблица «_Const10013», индекс «_Const10013_ByKey».

Расследование ошибки нехватки памяти на сервере 1С 5

Узнаем размер таблиц «Const10013», «_Const10013_ByKey» на диске:

Расследование ошибки нехватки памяти на сервере 1С 6

На диске таблица занимает всего 4688 Кб = 4,6 Мб. Размер является незначительным, значит, причина не в константе.

Обнаруживаем, что кластер 1С является 32-разрядным:

Расследование ошибки нехватки памяти на сервере 1С 7

32-разрядный кластер 1С имеет ограничение примерно в 3.8 Гб, при достижении которого происходит падение процесса. В режиме отсутствия нагрузки rphost занял 3,2 Гб, что близко к порогу падения. Подобные инциденты будут происходить в любой момент времени.

Внесены изменения:

  • В кластере серверов 1С «Интервал превышения допустимого объёма памяти процессов» = 300. Настройка не избавляет от ошибки, но необходима для снижения частоты возникновения ошибки.
  • В планировщике Windows настроен перезапуск службы 1С; такими образом освобождается виртуальное адресное пространство в памяти, создаётся новый рабочий процесс.

Настройка также не гарантирует от ошибки, но снижает вероятность её возникновения.

Расследование ошибки нехватки памяти на сервере 1С 8

Для предотвращения повторной ошибки следует:

  • Сменить 32-разрядный кластер серверов 1С на 64-разрядный.
  • Так как на сервере используется 14 ядер процессора, необходимо осуществить переход на платформенные лицензии 1С КОРП для снятия ограничений по настройкам и обеспечения возможностей для гибкой настройки распределения памяти сервера.

Другие варианты

Зачастую, особенно в ситуации, когда нужно срочно вернуть систему в работоспособное состояние при возникновении подобной ошибки, можно попробовать такие «дедовские» способы, как перезагрузка сервера 1С или перезапуск рабочих процессов 1С, что приведёт к уменьшению объёма используемой памяти.

Источником проблемы также может быть недостаток пространства на жестком диске сервера. Здесь решение будет зависеть от устройство сервера или кластера, но здесь также могут помочь и перезапуск сервера, и наращивание ёмкости диска (или освобождение существующего пространства), а также оптимизация запросов или обновление версии ПО системы.

Следите за новыми постами
Следите за новыми постами по любимым темам
28К открытий36К показов