|
|
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
Rio 10.3 Есть многопоточное приложение. Внезапно всплыло, что при определенных условиях в течении нескольких часов поток(и) "замерзает". Получилось повторить у себя. Виснет в бесконечном цикле на SysFreeMem в этом цикле - сам цикл Код: pascal 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. т.е. блок постоянно залочен. Результат чего это может быть? Первая мысль была про уже освобожденный блок, но Эврика молчит на эту тему. Поврежденная память? Лично я получил фриз главного потока при установке названия контрола, в Код: pascal 1. 2. 3. 4. вот StrDispose и привел к бесконечному циклу сна при попытке освобождения. Но то же самое наблюдается и не в главных потоках на освобождении чего угодно. Возможно, стоит выставить NeverSleepOnMMThreadContention := True ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 10:39 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
Vizit0r Код: pascal 1. 2. 3. 4. Что такое FText? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 11:02 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
пропа в TControl. Чтоб было понятнее масштаб - прикладываю лог из EL Там зависли почти все потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 11:36 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
Vizit0r Получилось повторить у себя. Лучше бы это посмотреть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 12:13 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
Это повреждение управляющих структур менеджера памяти. Зависание тут ни при чём, это лишь побочный эффект. Зависание нужно игнорировать и сосредоточиться на поиске проблем с памятью. Чаще всего такое бывает при buffer overflow. Но если в EL эта проверка включена, и она молчит - то 100% не buffer overflow. Как вариант - запись по устаревшему указателю в уже освобождённую память. Ещё вариант - запись по смещению за границы буфера, т.е. за границы и выделенной памяти и проверочного блока от EL. Если IsMultiThreaded точно стоит в True, то ой. Искать будете долго и сложно. Попробуйте начать с SafeMM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 13:42 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
Vizit0r Есть многопоточное приложение. Ну и я надеюсь, что это у вас не Dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 13:57 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
GunSmoker Чаще всего такое бывает при buffer overflow. Но если в EL эта проверка включена, и она молчит - то 100% не buffer overflow. Долго искал что-то связанное с Buffer overflow, не нашел. EL 7.7.8 По памяти из конфига есть только: GunSmoker Если IsMultiThreaded точно стоит в True, то ой. Искать будете долго и сложно. Стоит, но не мной выставленное, по дефолту. Стоит выключить? GunSmoker Попробуйте начать с SafeMM. скачал SafeMM для XE2, вечером попробую. Спасибо. [quot _Vasilisk_#22188086] Vizit0r Как вы запускаете новые потоки? Создаете объект TThread или вызываете функцию CreateThread? Создается наследник от TThread, а он, в свою очередь, создает еще 2-3 дочерних потока по необходимости. Но основная работа идет именно в этих "первичных", основных потоках. _Vasilisk_ Ну и я надеюсь, что это у вас не Dll Нет, из длл используются только инди ssl dll, и только при необходимости (что бывает у одного юзера из сотни), в моем случае и в случае человека, что отправил репорт - они не использовались. Моноприложение, так сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 16:10 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
Vizit0r, Catch memory problems. Выключать ничего не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2020, 18:06 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
с SafeMM почему-то начало время от времени дико отжирать память (Private Bytes) кусками по 100-200 мб до 3,5 гб. Если x86 версия дохла с OutOfMemory уже на 1,5 гб, то x64 версия доходит до 3,5 гб, и начинает "чудить" с памятью. И да, один раз опять повисло на FreeMem. Буду ловить дальше.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2020, 12:25 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
в итоге оказалось тонкое место в логике в кешере объектов, при довольно редком совпадении сразу нескольких факторов ссылка на объект переносилась в новое место, а в старом не удалялась. И в итоге, когда объект уничтожался - указатель вел куда угодно, но не на объект. Несколько раз такое происходит - и повреждение памяти становится только вопросом времени. 4 дня: логгирование всего и вся, потом анализ этих логов (точнее, сразу трех). И то, считаю, что легко отделался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2020, 09:16 |
|
||
|
Зависания потока при освобождении памяти.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2020, 13:26 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39996079&tid=2038020]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 532ms |

| 0 / 0 |
