@Karnah

Почему повисли все потоки из ThreadPool?

Всем доброго дня.
Есть приложение WPF, которое часто использует пул потоков. При одном из запусков приложения закончился пул потоков и оно зависло. В дампе видно, что 931 поток имеют стектрейс:
ntdll.dll!_NtWaitForSingleObject@12()
KERNELBASE.dll!WaitForSingleObjectEx()
kernel32.dll!@BaseThreadInitThunk@12()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll!__RtlUserThreadStart@8()


Стекйтрейс остальных потоков (включая главный) оканчиваются на ntdll.dll!_NtWaitForMultipleObjects@20(), ntdll.dll!_NtWaitForSingleObject@12(), ntdll.dll!_NtDelayExecution@8() и ntdll.dll!_NtClose@4(). Судя по логам потоки были забиты не сразу, а постепенно - это заняло больше 20 минут. Баг единичный, но очень хотелось бы разобраться. Что это могло быть и как можно получить больше информацию о проблеме?
Заранее спасибо!
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
учусь не реагировать на вопросы.. пока трудно.. ))
Karnah,
проект большой, потоки используются часто, баг единичный, нет стектрейса в управляемом коде. Искать ошибку в коде, значит искать иголку в стоге сена. Поэтому хотелось бы узнать, может есть инструменты, которые позволят больше узнать о проблеме.
как бы это по деликатнее..
помним, скорбим (с)
но раз уж вы задаете вопрос в теге C# - есть один ход:
- вносите отладочное логгирование
- везде где запускаете поток (там же можно генерить уникальный id, хоть guid)
- везде где успешно завершается поток (именно тут id был бы ценен)
- набейте морду/напишите докладную/высскажете все что думаете, кодеру, за выпуск в продакшен такого сырца

.. а вы что хотели?

upd по мотивам каментов (обновлено)
@Karnah,
Хотелось бы комментарий по стектрейсу - он вообще не затрагивает код проекта. В какой ситуации это возможно?
повторюсь - что у вас происходит, остается только телепатировать
В дампе видно
у вас BSOD что ли?
1 - а чем смотрите? не все инструменты покажут полный стек. в этой части, возможно и есть выбор инструментов. только это не про C#
2 - дамп то полный? может минидамп?
3 - стек управляемого кода, искать в дампе, еще сложнее, чем дебажить ваш проект. просто по тому, что его там может не быть вообще. что бы он был - ваше приложение должно успеть поймать исключение. но если у вас BSOD - это значит операционка крешится раньше управляемого кода.. понимаете?
4 - именно по этому, если у вас есть есть сорцы или автор - только основная часть ответа и дебаг
5 - WPF в принципе не генерит потоки сам. пока кодер не начнет. по этому снова - без сорцов, без объяснения что у вас там вообще твориться? ваш вопрос подобен поискам дерева и мужика из старого, популярного кино

Karnah,
То есть ожидался ответы вида: "стектрейс выглядит странно,
ни чего странного для
таймеры .. и бесконечные циклы..
абсолютно ожидаемые стеки на уровне неуправляемого кода. который система. просто у системы просят потоки, пока она не захлебнется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ПРОФЭЛИТ Казань
от 100 000 до 170 000 ₽
Mystery Tag Новосибирск
от 80 000 до 110 000 ₽
от 100 000 до 200 000 ₽