|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Описание больше для разработчиков 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.
В Firebird.log естественно следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код тестовой UDF Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Стек зависшего процесса (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.
К сожалению, на десятке более "мелких" баз с аналогичным триггером (в т.ч. на этом сервере) не воспроизводится, по этому тестовый пример подготовить и запостить в трекер не получилось. Я понимаю что это "стук в подвале"... но если у разработчиков есть мысли по этому поводу - могу сделать дополнительные проверки, а также залить куда-то дамп зависшего процесса. От конфигурации сервера и количества коннектов не зависит, воспроизводиться на 1 коннекте. Аналогично и на Firebird 3.0.7 Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 14:43 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Viktor_bs, а если попытаться вылечить UDF? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 14:46 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
kdv Viktor_bs, а если попытаться вылечить UDF? Не реально, от некоторых удф и исходников нет. Работают и работают... Ну и полностью защитится от Exception бывает не реально. На 2.5. проблемы нет. Да и процесс сервера может упасть не только из-за удф. P.S. Проблему я временно закрыл убрав WHEN ANY DO в триггере. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 14:54 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Viktor_bs, дамп есть ? Этот стек почти никуда не годится, ибо в нём нет инф-ции о номерах строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 15:26 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
hvlad Viktor_bs, дамп есть ? Этот стек почти никуда не годится, ибо в нём нет инф-ции о номерах строк. https://drive.google.com/file/d/17Yx-0RIOPkwkDLdpDy1KsaLGGxmAxrBa https://drive.google.com/file/d/1n-K2arBufqA34b-xuxEfLeMaOzVHbbSm Если гугл-диск не удобен, скажите куда выложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 15:41 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 16:06 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
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.
Воспроизвел с зависанием, заново снял дампы и сделал скришот ProcessExplorer https://drive.google.com/file/d/16Mq3G9PvOMiBfCrQrWntOouyi8Fo200U https://drive.google.com/file/d/14pjE1yn9teD8gOLx9K-Pjpoe76ZaKDM9 Могу еще раз повторить с попыткой обратится с другого коннекта к mon$ таблицам и снять дамп и его. Он тоже зависает при обращении к mon$ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 17:09 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 18:38 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Давно не видел я дампов 32-bit процессов, тем более в x64 OS. В общем, разобрался с дампами. Сходу могу только повторить, что пока не вижу влияния триггера на дисконнект. Для обхода проблемы пока ставьте BugcheckAbort = 1, более приемлемое решение будем искать. Вышеприведенный стек можно в трекер, я там добавлю инф-цию, если будет нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 19:14 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Перед постом в теркер решил попробовать воспроизвести тестовый пример и вот еще что еще обнаружил, может это важно.. Зависание никак не воспроизводится с помощью 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 12:15 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
hvlad Вышеприведенный стек можно в трекер, я там добавлю инф-цию, если будет нужно. Чето никак не могу запостить... Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 12:29 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Viktor_bs, так совпало, что мы как раз в процессе переноса трекера на github. Старый трекер (JIRA) в read-only режиме. Новый трекер тут: https://github.com/FirebirdSQL/firebird/issues ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 13:21 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
Viktor_bs, трекер вроде бы переехал на github. Правда пока не понятно окончательно или ещё нет https://github.com/FirebirdSQL/firebird/issues ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 13:26 |
|
Зависание падающего процесса Firebird3
|
|||
---|---|---|---|
#18+
hvlad Сходу могу только повторить, что пока не вижу влияния триггера на дисконнект. Да, без триггера тоже удалось повторить https://github.com/FirebirdSQL/firebird/issues/6781 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2021, 11:23 |
|
|
start [/forum/topic.php?fid=40&msg=40065438&tid=1560046]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 282ms |
0 / 0 |