Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Падение процессов сервера 1с при работе с компонентой #79

Open
sliderv opened this issue Apr 12, 2022 · 8 comments

Comments

@sliderv
Copy link

sliderv commented Apr 12, 2022

Приветствую!
Существует проблема, которую не знаю как решить, не знаю баг это или сервера, или компоненты.
Сервер 1с на linux (x64 CentOS Linux release 7.9.2009). Сервер 1с - 8.3.20.1789 (пробовал также на 8.3.20.1674)
Релиз компоненты - последний доступный (пробовал и на других более младших релизов).

Падение происходит при вызове метода Connect на 2-й или 3-й раз в рамках одного сеанса. При этом после каждого вызова всегда осуществляется очистка клиента (Клиент = Неопределено). Первый вызов всего кода всегда проходит успешно.

Клиент.Connect(Параметры.АдресСервера, Параметры.Порт, Параметры.ИмяПользователя, Параметры.Пароль, Параметры.Хост, , , 600);

Код модуля в общем то стандартный:
` Клиент = ВернутьКлиентRMQ();

Параметры = ВернутьПараметрыПодключенияRabbitMQ();
ВходящееСообщение = ""; 
IDСообщения = 0; 
Попытка
	Клиент.Connect(Параметры.АдресСервера, Параметры.Порт, Параметры.ИмяПользователя, 
	Параметры.Пароль, Параметры.Хост, , , 60);
	Клиент.DeclareQueue(ИмяОчереди,Ложь, Истина, Ложь, Ложь);
	Потребитель = Клиент.BasicConsume(ИмяОчереди, "", Ложь, Ложь, 0);
	Пока Клиент.BasicConsumeMessage("", ВходящееСообщение, IDСообщения, 5000) Цикл
		Клиент.BasicAck(IDСообщения);
		ВходящееСообщение = ""; // Обнуляем, чтобы избежать утечку памяти
		IDСообщения = 0; // Обнуляем, чтобы избежать утечку памяти
	КонецЦикла;
	Клиент.BasicCancel("");
Исключение
	Ошибка = Клиент.GetLastError();
КонецПопытки; 
Клиент = Неопределено;`

В логах компоненты пишется при падении :
[D 2022-04-12 16:37:31 1649763451 140232744187648]init
[D 2022-04-12 16:37:31 1649763451 140232744187648]init end
[D 2022-04-12 16:37:32 1649763452 140232744187648]1C call proc start 1

Вот лог компоненты при успешном вызове кода:
[D 2022-04-12 16:37:04 1649763424 140431454095104]init
[D 2022-04-12 16:37:04 1649763424 140431454095104]init end
[D 2022-04-12 16:37:05 1649763425 140431454095104]1C call proc start 1
[D 2022-04-12 16:37:05 1649763425 140431454095104]1C call proc end 1
[D 2022-04-12 16:37:06 1649763426 140431454095104]1C call func start 2
[D 2022-04-12 16:37:06 1649763426 140431454095104]1C call func end 2
[D 2022-04-12 16:37:06 1649763426 140431454095104]1C call func start 4
[D 2022-04-12 16:37:06 1649763426 140431454095104]1C call func end 4
[D 2022-04-12 16:37:06 1649763426 140431454095104]1C call func start 5
[D 2022-04-12 16:37:11 1649763431 140431454095104]1C call func end 5
[D 2022-04-12 16:37:11 1649763431 140431454095104]1C call proc start 6
[D 2022-04-12 16:37:11 1649763431 140431454095104]1C call proc end 6
[D 2022-04-12 16:37:12 1649763432 140431454095104]done start
[D 2022-04-12 16:37:12 1649763432 140431454095104]done
[D 2022-04-12 16:37:12 1649763432 140431454095104]done end
[D 2022-04-12 16:37:12 1649763432 140431454095104]destruct

В технологическом журнале 1с:

Exception=580392e6-ba49-4280-ac67-fcd6f2180121,Descr='src/vrsbase/src/VResourceInfoBaseImpl.cpp(1169):
580392e6-ba49-4280-ac67-fcd6f2180121: Неспецифицированная ошибка работы с ресурсом
Ошибка при выполнении запроса POST к ресурсу /e1cib/modules/call:
e0417abc-63b4-461b-b1b6-01d2d2b0cca5: На сервере 1С:Предприятия произошла неисправимая ошибка. Приложение будет закрыто'
@RoddyVR
Copy link

RoddyVR commented May 26, 2022

Наткнулись на ровно эту же проблему. До логов и журнала еще не дошел, но поведение тоже.
У нас валит каждое второе подключение к рабиту. тоесть одно проходит нормально
Сonnect,
DeclareQueue,
BasicConsume,
BasicConsumeMessage
BasicCancel
и после этого всего КлиентКомпоненты = Неопределено.

А вот следующий раз когда запускается фоновое и выполняет этот же код, на строке с Connect убивает напрочь фоновое задание.
Потом следующий опять ок проходит, и так далее. каждый второй.

у меня "КлиентКомпоненты = Неопределено", небыло (из примеров скопировал, на правило не обратил внимание)... был уверен что изза этого каждый второй валисться... но нет. добавил, не помогло.

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

Самое обидное что валит весь сеанс фонового задания которое это дело запускает, и поэтому и то что connect обернут в Попытка/Исключение не чего не дает.

из лога у sliderv заметил что у нас у обоих это веселье в расширение, может это как то влияет?
добавлю код функции, может я чтото очевидное упускаю.

`
Функция ПрочитатьСообщение(КлиентКомпоненты = Неопределено, Форма = Неопределено) Экспорт
Если КлиентКомпоненты = Неопределено Тогда
КлиентКомпоненты = ПолучитьКомпоненту();
КонецЕсли;
Если Форма = Неопределено Тогда
Форма = ПолучитьШаблонСтруктуруНастроек(); //структура с текстовыми полями, кроме порт число.
КонецЕсли;

Попытка
	КлиентКомпоненты.Connect(Форма.Адрес, Форма.Порт, Форма.Логин, Форма.Пароль, Форма.ВиртуальныйХост); 
Исключение
	ВызватьИсключение "a " + КлиентКомпоненты.GetLastError();
КонецПопытки;

Попытка
	КлиентКомпоненты.DeclareQueue(Форма.ИмяОчереди, Ложь, Ложь, Ложь, Ложь);
Исключение
	ВызватьИсключение "b " +КлиентКомпоненты.GetLastError();
КонецПопытки;

	
Попытка
	Потребитель ="";
	Потребитель = КлиентКомпоненты.BasicConsume(Форма.ИмяОчереди, "", Истина, Ложь, 0);
Исключение
	ВызватьИсключение "c " +КлиентКомпоненты.GetLastError();
КонецПопытки;
	
Попытка
	ОтветноеСообщение = "";
	ТегСообщения = 0;
	Если КлиентКомпоненты.BasicConsumeMessage("", ОтветноеСообщение, ТегСообщения, 5000) Тогда
		Форма.ОтветноеСообщение = ОтветноеСообщение;
		КлиентКомпоненты.BasicAck(ТегСообщения);
		ОтветноеСообщение = "";
		ТегСообщения = 0;
	Иначе
		ТекстСообщения = НСтр("ru='Очередь пустая!'");
	КонецЕсли;
Исключение
	ВызватьИсключение "d " +КлиентКомпоненты.GetLastError();
КонецПопытки;
	
Попытка
	КлиентКомпоненты.BasicCancel("");
Исключение
	ВызватьИсключение "е " +КлиентКомпоненты.GetLastError();
КонецПопытки;

КлиентКомпоненты = Неопределено;             
Возврат Форма;

КонецФункции
`

@fdimok
Copy link

fdimok commented Jul 8, 2022

Столкнулись с подобной ситуацией на линуксе. Каждая вторая попытка работать с компонентой заканчивается ошибкой "Аварийно завершился рабочий процесс фонового задания". Коллеги, удалось справиться с проблемой?

@RoddyVR
Copy link

RoddyVR commented Jul 14, 2022

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

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

@NikolayIvanoff
Copy link

NikolayIvanoff commented Jul 28, 2022

Я тоже борюсь с падениями rphost'ов и уже несколько раз наткнулся, что последней строкой в техжурнале перед падением rphost было:
КомпонентаRMQ = Неопределено;
А также в ТЖ есть такие строчки при "обнулении" объекта компоненты:
EXCP, .... , Exception=f6f167a0-dcc9-49ad-8f8e-2c9d9904e4fe,Descr="src\addnrmt\src\AddInTransportImpl.cpp(80):
f6f167a0-dcc9-49ad-8f8e-2c9d9904e4fe: Key not found: 'type'",Context='

Переписал код на использование компоненты в изолированном режиме (реализовано в 1С 8.3.21) - все равно получил падение rphost на строчке: Компонента = Новый("AddIn.BITERP.PinkRabbitMQ");

@sbmikhail
Copy link

Добрый день! При отправке сообщения через фоновое задание так же рубит фоновое на второй раз. Удалось ли решить проблему на компонентах для linux?

@andrei-karpov
Copy link

У меня также было, плюс файлы были слишком большие для передачи, клиент при длительной обработке сообщения отваливался, при этом можно было подтвердить получение сообщения, и компонента писала, что все хорошо, при последующем получении сообщений отвечало, что они закончились, из-за этого происходило зацикливание обработки сообщения, так как его не успевали подтвердить. Пришлось отказаться от компоненты на работу через COM, теперь работает как часы

@Vasiliy067
Copy link

Vasiliy067 commented Nov 29, 2022

Всем привет! Так же имеется проблема с методом Connect. Только в отличии от других жалоб, происходит ребут всего сервера. Ошибка происходит только при защищенном подключении. В логах винды удалось определить последовательность ошибок:
Сначала такая ошибка:
Имя журнала: Application
Источник: Windows Error Reporting
Дата: 28-Nov-22 19:50:45
Код события: 1001

затем:
Имя журнала: System
Источник: User32
Дата: 28-Nov-22 19:50:45
Код события: 1074
Пользователь: СИСТЕМА
Описание:
Процесс wininit.exe инициировал действие "Перезапустить" для компьютера от имени пользователя по причине: Причина на перечислена
Код причины: 0x50006
Тип выключения: Перезапустить
Комментарий: Неожиданно завершен системный процесс "C:\Windows\system32\lsass.exe" с кодом состояния -1073741819. Будет произведена перезагрузка системы.

1С серверная x64, версия 8.3.20.1996
Microsoft Windows Server 2016
PinkRabbitMQ v2.1.1.149

Код 1С:
КомпонентаПодключена = ПодключитьВнешнююКомпоненту("ОбщийМакет.b2b_Rabbit", "BITERP", ТипВнешнейКомпоненты.Native);
Подключение = Новый("AddIn.BITERP.PinkRabbitMQ");
Подключение.Connect(
Параметры.Адрес,
Параметры.Порт,
Параметры.Логин,
Параметры.Пароль,
Параметры.ВиртуальныйХост,
0,
Параметры.ЗащищенноеПодключение);

@Tomap-Tomap
Copy link

Аналогичная проблема на линкус сервере с последней версией. На версии 1.9 таких проблем не наблюдаем.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants