Недавно столкнулся с неприятной ошибкой на одном из старых серверов с 1С. Решил записать решение, чтобы не забыть и с другими поделиться. При определенных обстоятельствах пользователь не может зайти в базу 1С, получая ошибку во время логина на нехватку памяти.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Введение
Данная ошибка может сопровождаться разным названием и описанием, но по смыслу они будут примерно одинаковые. Суть в том, что не хватает оперативной памяти для входа в базу. Но при этом совсем не очевидно, о какой памяти идет речь. Например, вот текст:
Невосстановимая ошибка
Ошибка при выполнении запроса 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 грузит процессор.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
пока фоновые задания при старте новой версии не отработают - проблема не уйдет
Одна винда, хотя в нормальных конторах в качестве сервера используется Linux
Только что звонил в свою ИТС и там сказали, что переход с проф на КОРП будет стоить 21000 рублей. У меня ситуация интереснее. На 1 сервере вместе живут 1с БУХ и 1С ЗУП. На первой лицензия ПРОФ, на второй КОРП. Открывая консоль администрирования, в оснастке нет нужных параметров, соответствующих лицензии КОРП. Попробуем найти техническое решение вопроса.
Достаточно уменьшить количество соединений. Количество баз оставить 8. И не будет нарушения.
А если проблема с базой и она одним-двумя соединениями всю память выедает?
Конечно же в вашем случае есть одно решение, апгрейд лицензии с 32бит на 64 , все остальные - танцы с бубном. Нестандартные настройки кластера и сервера свежие платформы 1с позволяют для 10 пользовательских сессий, а дальше будет "ругаться" на нарушение
Спасибо за информацию. Когда навел справки, тоже понял, что это единственное удобное решение вопроса. Другое дело, что денег стоит. Сервер работал нормально много лет и тут внезапно надо выложить 100 т.р., чтобы он продолжил такую же нормальную работу. Неприятно, с учетом того, что ни количество пользователей, ни количество баз не увеличились. Наоборот, уменьшились.
Просто не нужно сразу полуфабрикаты покупать\ставить. Сервер должен быть 64 бит, без вариантов. Если нашлись деньги на 1С сервер, то найдутся и на 64.
Так это было куплено лет 7 назад. Тогда x32 был вполне актуален.
нет, апгрейд 32 на 64 стоит 43 200 руб а не 100 тыс.