Недавно столкнулся с неприятной ошибкой на одном из старых серверов с 1С. Решил записать решение, чтобы не забыть и с другими поделиться. При определенных обстоятельствах пользователь не может зайти в базу 1С, получая ошибку во время логина на нехватку памяти.
Введение
Данная ошибка может сопровождаться разным названием и описанием, но по смыслу они будут примерно одинаковые. Суть в том, что не хватает оперативной памяти для входа в базу. Но при этом совсем не очевидно, о какой памяти идет речь. Например, вот текст:
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Ошибка выделения памяти
HRESULT=80004005,
Изначально мне показалось, что проблема с нехваткой памяти для работы MSSQL сервера. Так что я пошел и отрегулировал ее потребление в настройках сервера. Но это не помогло. На следующий день пользователи опять периодически стали получать эту ошибку, хотя на сервере было достаточно свободной оперативной памяти. Стал разбираться дальше.
Неспецифицированная ошибка работы с ресурсом
Второй вариант текста той же самой ошибки выглядел следующим образом:
Неспецифицированная ошибка работы с ресурсом
Ошибка при выполнении запроса GET к ресурсу /e1cib/cmi/commands:
Недостаточно свободной памяти для выполнения операции
После этого я уже понял, что проблема не в MSSQL сервере, а в самой 1С. Поиск в интернете и анализ ситуации на сервере привел к пониманию проблемы. Суть ее вот в чем. Сервер 1С создал рабочий процесс rphost, который обслуживает подключения к базам данных. В моем случае сервер 1С 32-х битный, так что он ограничен по максимальному использованию памяти одним рабочим процессом.
В дефолтных настройках сервера 1С 1 рабочий процесс обслуживает 8 баз и 256 подключений. Только после превышения этих лимитов, запускается второй. Причем примерно год назад 1С сделала большую подлость - они запретили изменять эти настройки тем, у кого нет лицензии КОРП. Таким образом, с лицензией ПРОФ и 32-х битным сервером вы стали заложниками ситуации с нехваткой памяти. Исправить ее никак не сможете. Либо переходите на лицензию КОРП, либо на 64-х битный сервер. И то и другое нормально бьет по бюджету небольшой организации.
Решение проблемы "недостаточно свободной памяти для выполнения операции" в 1С
В общем случае данную проблему можно решить следующим образом. Открываем консоль управления кластером, идем в раздел Рабочие серверы, выбираем свой сервер и его свойства. Меняем 2 параметра:
- Количество ИБ на процесс.
- Количество соединений на процесс.
Чтобы проблема ушла, вам необходимо уменьшить значения. Определить оптимальные сходу вряд ли получится. Для начала можете их просто уменьшить вдвое, поставив 4 и 128 соответственно.
Если проблема не уйдет, уменьшайте еще. Только имейте ввиду, если у вас нет лицензии КОРП, то через некоторое время пользователи вообще не смогут заходить в базу, так как у них будет появляться сообщение о нарушении лицензии. Когда это случится, точно не известно, так как 1С выполняет проверку конфига на соответствие лицензии по своему расписанию. Может через день, а может через неделю. Если это случится, то нужно будет вернуть параметры обратно в дефолт - 8 и 256.
Заключение
Если нет возможности изменить настройки из-за несоответствия лицензии, временно поможет перезапуск сервера 1С. Но работать он будет нормально до тех пор, пока очередной рабочий процесс не займет максимально возможную для себя память. На практике это в районе 3.5 Гб. После этого если не запустится новый рабочий процесс, новые подключения к базам будут невозможны. Придется раскошелиться на 64-х битный сервер.
Если у вас медленно работает сервер 1С, читайте мою статью по его профилированию - Процесс 1С rmngr.exe грузит процессор.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.