powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависание падающего процесса Firebird3
15 сообщений из 15, страница 1 из 1
Зависание падающего процесса Firebird3
    #40065416
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описание больше для разработчиков Firebird

Вводные данные теста:
Microsoft Windows Server 2012 R2 Standard
Intel(R) Xeon(R) CPU E5-2643 v3 @ 3.40GHz
Память 32Г

Firebird3 x86 WI-V3.0.8.33454 (ServerMode = Classic)
База: 2Тб, более 10тыс процедур, 5.5тыс таблиц

DefaultDbCachePages = 512
TempBlockSize = 4M
TempCacheLimit = 512M
LockMemSize = 20M
LockHashSlots = 30011

При массовом тестировании перевода большой базы с FB25 на FB3 обнаружилась следующая проблема:
При падении процесса сервера, например Exception в UDF, падающий процесс зависает и как минимум блокирует доступ к мониторинговым таблицам другим коннектам.
Детальное исследование показало что это происходит на системном триггере на disconnect
Код триггера упрощен до минимума, лишь бы воспроизводилась ошибка.
Зависание, скорее всего, происходит из-за возникновения ошибки и наличия WHEN ANY DO.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR ALTER TRIGGER SYS_ON_DISCONNECT_TRG
ACTIVE ON DISCONNECT POSITION 0
AS
  DECLARE V_SESSION_ID INTEGER;
BEGIN

  --V_SESSION_ID = RDB$GET_CONTEXT('USER_SESSION', 'SYS_SESSIONS_ID');
  V_SESSION_ID = 1 / 0;

  WHEN ANY DO
  BEGIN
  END

END


В Firebird.log естественно следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
MORION-NBK	Sat Apr 24 13:44:25 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.

Код тестовой UDF
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function CrashServer(var mode: Integer): double; cdecl;
var
  F: TextFile;
begin
  Result := 0;

  if mode = 1 then Result := StrLen(PChar(nil));
  if mode = 2 then raise Exception.Create('user_exception');

end;



Стек зависшего процесса (Sysinternals ProcessExplorer)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
==============================================
ntoskrnl.exe!KeSynchronizeExecution+0x2106
ntoskrnl.exe!KeWaitForMultipleObjects+0x135e
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeDelayExecutionThread+0xe14
ntoskrnl.exe!PsLookupThreadByThreadId+0xfc
ntoskrnl.exe!_setjmpex+0x6553
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x598
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x46e
wow64.dll!Wow64LdrpInitialize+0x23a
wow64.dll!Wow64LdrpInitialize+0x172
ntdll.dll!LdrInitializeThunk+0x12b
ntdll.dll!LdrInitializeThunk+0xe
ntdll.dll!ZwDelayExecution+0xc
Engine12.DLL!Thread::sleep+0xd
Engine12.DLL!purge_attachment+0x11b
Engine12.DLL!`anonymous namespace'::shutdownAttachments+0x1e8
Engine12.DLL!shutdown_thread+0x143
Engine12.DLL!Jrd::JProvider::shutdown+0x19c
Engine12.DLL!Firebird::IProviderBaseImpl<Jrd::JProvider,Firebird::CheckStatusWrapper,Firebird::IPluginBaseImpl<Jrd::JProvider,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IReferenceCountedImpl<Jrd::JProvider,Firebird::CheckStatusWrapper,Firebi
fbclient.dll!Why::Dispatcher::shutdown+0x2a3
fbclient.dll!fb_shutdown+0xe8
fbclient.dll!Firebird::PluginManager::unregisterModule+0xaa
fbclient.dll!Firebird::IPluginManagerBaseImpl<Firebird::PluginManager,Firebird::CheckStatusWrapper,Firebird::IVersionedImpl<Firebird::PluginManager,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IPluginManager> > >::cloopunregisterModuleDispatch
Legacy_UserManager.DLL!Firebird::UnloadDetectorHelper::~UnloadDetectorHelper+0x74
Legacy_UserManager.DLL!Firebird::UnloadDetectorHelper::`scalar deleting destructor'+0x8
Legacy_UserManager.DLL!Firebird::InstanceControl::InstanceLink<Firebird::GlobalPtr<Firebird::UnloadDetectorHelper,1>,1>::dtor+0x19
Legacy_UserManager.DLL!Firebird::InstanceControl::InstanceList::destructors+0x62
Legacy_UserManager.DLL!Firebird::InstanceControl::destructors+0x6a
Legacy_UserManager.DLL!`anonymous namespace'::allClean+0x6e
Legacy_UserManager.DLL!_CRT_INIT+0x1a5
Legacy_UserManager.DLL!__DllMainCRTStartup+0xb7
Legacy_UserManager.DLL!_DllMainCRTStartup+0x1e
ntdll.dll!RtlInitializeCriticalSection+0x126
ntdll.dll!RtlInitializeCriticalSection+0xa0
ntdll.dll!RtlReportSilentProcessExit+0x108
ntdll.dll!RtlExitUserProcess+0x81
MSVCR100.dll!?_query_new_mode@@YAHXZ+0x19c
MSVCR100.dll!?_query_new_mode@@YAHXZ+0x2b5
MSVCR100.dll!exit+0x11
Engine12.DLL!ISC_exception_post+0x1e2
Engine12.DLL!invoke+0x3b3
MSVCR100.dll!_seh_longjmp_unwind4+0x2e
Engine12.DLL!FUN_evaluate+0xa70
Engine12.DLL!Jrd::UdfCallNode::execute+0x2dd
Engine12.DLL!Jrd::EVL_expr+0x53
Engine12.DLL!EXE_assignment+0x2b
Engine12.DLL!Jrd::CompoundStmtNode::execute+0x52
Engine12.DLL!EXE_looper+0x19b
Engine12.DLL!looper_seh+0x56
Engine12.DLL!execute_looper+0x76
Engine12.DLL!EXE_receive+0xf0
Engine12.DLL!JRD_receive+0x22
Engine12.DLL!Jrd::DsqlDmlRequest::fetch+0x24d
Engine12.DLL!Jrd::DsqlCursor::fetchNext+0x1c
Engine12.DLL!Jrd::JResultSet::fetchNext+0x8e
Engine12.DLL!Firebird::IResultSetBaseImpl<Jrd::JResultSet,Firebird::CheckStatusWrapper,Firebird::IReferenceCountedImpl<Jrd::JResultSet,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IVersionedImpl<Jrd::JResultSet,Firebird::CheckStatusWrapper,Fir
fbclient.dll!Why::YResultSet::fetchNext+0x6e
fbclient.dll!Firebird::IResultSetBaseImpl<Why::YResultSet,Firebird::CheckStatusWrapper,Firebird::IReferenceCountedImpl<Why::YResultSet,Firebird::CheckStatusWrapper,Firebird::Inherit<Firebird::IVersionedImpl<Why::YResultSet,Firebird::CheckStatusWrapper,Fir
firebird.exe!rem_port::fetch+0x2bc
firebird.exe!process_packet+0x3ff
firebird.exe!loopThread+0x18a
firebird.exe!threadStart+0x74
MSVCR100.dll!_endthreadex+0x3a
MSVCR100.dll!_endthreadex+0xe4
ntdll.dll!RtlInitializeExceptionChain+0x8f
ntdll.dll!RtlInitializeExceptionChain+0x5a
==============================================

К сожалению, на десятке более "мелких" баз с аналогичным триггером (в т.ч. на этом сервере) не воспроизводится, по этому тестовый пример подготовить и запостить в трекер не получилось.
Я понимаю что это "стук в подвале"...
но если у разработчиков есть мысли по этому поводу - могу сделать дополнительные проверки, а также залить куда-то дамп зависшего процесса.

От конфигурации сервера и количества коннектов не зависит, воспроизводиться на 1 коннекте. Аналогично и на Firebird 3.0.7

Спасибо.
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065417
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

а если попытаться вылечить UDF?
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065419
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Viktor_bs,

а если попытаться вылечить UDF?

Не реально, от некоторых удф и исходников нет. Работают и работают...
Ну и полностью защитится от Exception бывает не реально.
На 2.5. проблемы нет. Да и процесс сервера может упасть не только из-за удф.

P.S. Проблему я временно закрыл убрав WHEN ANY DO в триггере.
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065426
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

дамп есть ?
Этот стек почти никуда не годится, ибо в нём нет инф-ции о номерах строк.
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065432
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Viktor_bs,

дамп есть ?
Этот стек почти никуда не годится, ибо в нём нет инф-ции о номерах строк.

https://drive.google.com/file/d/17Yx-0RIOPkwkDLdpDy1KsaLGGxmAxrBa
https://drive.google.com/file/d/1n-K2arBufqA34b-xuxEfLeMaOzVHbbSm

Если гугл-диск не удобен, скажите куда выложить.
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065438
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

увы, этот дамп бесполезен, вот стек его единственного потока:

wow64cpu!CpupSyscallStub+0x2
wow64cpu!Thunk2ArgNSpNSpReloadState+0xc
wow64!RunCpuSimulation+0xa
wow64!Wow64LdrpInitialize+0x172
ntdll!_LdrpInitialize+0xcb
ntdll!LdrInitializeThunk+0xe

В какой момент был снят дамп и с того-ли процесса ?

Насколько стабильно вы у себя это воспроизводите ?
Что будет, если поставить BugcheckAbort = 1 в конфиге ?

Viktor_bs
Детальное исследование показало что это происходит на системном триггере на disconnect
В вашем стеке до этого триггера дело ещё не дошло.
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065454
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Viktor_bs,

увы, этот дамп бесполезен, вот стек его единственного потока:

wow64cpu!CpupSyscallStub+0x2
wow64cpu!Thunk2ArgNSpNSpReloadState+0xc
wow64!RunCpuSimulation+0xa
wow64!Wow64LdrpInitialize+0x172
ntdll!_LdrpInitialize+0xcb
ntdll!LdrInitializeThunk+0xe

В какой момент был снят дамп и с того-ли процесса ?

Насколько стабильно вы у себя это воспроизводите ?
Что будет, если поставить BugcheckAbort = 1 в конфиге ?

Повторяемость хорошая. Дамп снимал после зависания, через минуту максимум.

При BugcheckAbort = 1 не виснет (т.е. падает), но появилась дополнительная строчка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
MORION-NBK	Sat Apr 24 16:43:42 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.


MORION-NBK	Sat Apr 24 16:43:42 2021
	 An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.

Воспроизвел с зависанием, заново снял дампы и сделал скришот ProcessExplorer


https://drive.google.com/file/d/16Mq3G9PvOMiBfCrQrWntOouyi8Fo200U
https://drive.google.com/file/d/14pjE1yn9teD8gOLx9K-Pjpoe76ZaKDM9

Могу еще раз повторить с попыткой обратится с другого коннекта к mon$ таблицам и снять дамп и его.
Он тоже зависает при обращении к mon$
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065474
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065477
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно не видел я дампов 32-bit процессов, тем более в x64 OS.
В общем, разобрался с дампами.

Сходу могу только повторить, что пока не вижу влияния триггера на дисконнект.

Для обхода проблемы пока ставьте BugcheckAbort = 1, более приемлемое решение будем искать.
Вышеприведенный стек можно в трекер, я там добавлю инф-цию, если будет нужно.
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40065577
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед постом в теркер решил попробовать воспроизвести тестовый пример и вот еще что еще обнаружил, может это важно..
Зависание никак не воспроизводится с помощью isql, только IBExpert. До 11:52 в логе это IBExpert, после isql
Если процесс падает без зависания, то в логе отсутствует Shutting down, т.е. при зависании обязательно присутствует после ошибки Shutting down.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
MORION-NBK	Sun Apr 25 11:38:54 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.


MORION-NBK	Sun Apr 25 11:39:09 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.


MORION-NBK	Sun Apr 25 11:39:27 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.


MORION-NBK	Sun Apr 25 11:39:32 2021
	Shutting down the server with 1 active connection(s) to 1 database(s), 0 active service(s)

MORION-NBK	Sun Apr 25 11:52:22 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.


MORION-NBK	Sun Apr 25 11:52:23 2021
	The user defined function: 	UDF_CRASH_SERVER
	   referencing entrypoint: 	CrashServer                                                                                                                                                                                                                                                    
	                in module: 	sysudf.dll
	caused the fatal exception: An exception occurred that does
		not have a description.  Exception number EEDFADE.
	This exception will cause the Firebird server
	to terminate abnormally.

...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40066286
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad

Вышеприведенный стек можно в трекер, я там добавлю инф-цию, если будет нужно.

Чето никак не могу запостить...
Код: plaintext
1.
2.
3.
-----------------------------------------------------------------------------------------
Errors
Error creating issue: Could not create workflow instance: root cause: while inserting: [GenericEntity:OSWorkflowEntry][id,null][name,Firebird][state,0] (SQL Exception while executing the following:INSERT INTO OS_WFENTRY (ID, NAME, INITIALIZED, STATE) VALUES (?, ?, ?, ?) (GDS Exception. 335544765. attempted update on read-only database))
-----------------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40066312
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

так совпало, что мы как раз в процессе переноса трекера на github.
Старый трекер (JIRA) в read-only режиме.
Новый трекер тут: https://github.com/FirebirdSQL/firebird/issues
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40066313
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

трекер вроде бы переехал на github. Правда пока не понятно окончательно или ещё нет

https://github.com/FirebirdSQL/firebird/issues
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40066611
Viktor_bs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad

Сходу могу только повторить, что пока не вижу влияния триггера на дисконнект.

Да, без триггера тоже удалось повторить
https://github.com/FirebirdSQL/firebird/issues/6781
...
Рейтинг: 0 / 0
Зависание падающего процесса Firebird3
    #40066669
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viktor_bs,

спасибо, будем разбираться
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Зависание падающего процесса Firebird3
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]