Задать вопрос
@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 минут. Баг единичный, но очень хотелось бы разобраться. Что это могло быть и как можно получить больше информацию о проблеме?
Заранее спасибо!
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
Karnah,
проект большой, потоки используются часто, баг единичный, нет стектрейса в управляемом коде. Искать ошибку в коде, значит искать иголку в стоге сена. Поэтому хотелось бы узнать, может есть инструменты, которые позволят больше узнать о проблеме.
как бы это по деликатнее..
помним, скорбим (с)
но раз уж вы задаете вопрос в теге C# - есть один ход:
- вносите отладочное логгирование
- везде где запускаете поток (там же можно генерить уникальный id, хоть guid)
- везде где успешно завершается поток (именно тут id был бы ценен)
- набейте морду/напишите докладную/высскажете все что думаете, кодеру, за выпуск в продакшен такого сырца

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

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

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

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

Похожие вопросы