gpt4 book ai didi

.net - 当前逻辑线程增加/线程堆栈泄漏

转载 作者:行者123 更新时间:2023-12-04 04:26:47 25 4
gpt4 key购买 nike

在性能监视器中监视我的.NET应用程序,我可以看到 .NET CLR LocksAndThreads/当前逻辑线程数随着时间的推移稳步增加(当前为293),这表明线程堆栈正在泄漏。

我可以找到许多文章来告诉我这是问题所在,但没有什么能告诉我如何找到原因-那我应该从哪里开始呢? Windbg可以告诉我问题出在哪里吗?

这是我在3小时内的性能监视器,告诉我当前的逻辑线程为150:

这是线程窗口的输出,不会告诉我太多,因为我无法访问它们的调用堆栈-它们大多标记为[不可用]或[正在 sleep ,等待或加入]。 [外部代码]:

Unflagged       141024  124 Worker Thread   <No Name>       Normal
Unflagged > 0 0 Unknown Thread [Thread Destroyed]
Unflagged 136272 2 Worker Thread <No Name> Highest
Unflagged 133060 7 Worker Thread vshost.RunParkingWindow [Managed to Native Transition] Normal
Unflagged 136952 10 Main Thread Main Thread [edited].Program.Main Normal
Unflagged 134544 9 Worker Thread .NET SystemEvents [Managed to Native Transition] Normal
Unflagged 136556 11 Worker Thread Worker Thread [edited].MessageService.ProcessJobs.AnonymousMethod__0 Normal
Unflagged 141364 113 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 140896 0 Worker Thread [Thread Destroyed] Normal
Unflagged 136776 19 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 135704 20 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 136712 21 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 134984 22 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 134660 23 Worker Thread Worker Thread [edited].BroadcastService.ProcessJobs.AnonymousMethod__1d Normal
Unflagged 140224 152 Worker Thread <No Name> Normal
Unflagged 140792 157 Worker Thread <No Name> Normal
Unflagged 137116 0 Worker Thread <No Name> Normal
Unflagged 140776 111 Worker Thread <No Name> Normal
Unflagged 140784 0 Worker Thread [Thread Destroyed] Normal
Unflagged 140068 145 Worker Thread <No Name> Normal
Unflagged 139000 150 Worker Thread <No Name> Normal
Unflagged 140828 52 Worker Thread <No Name> Normal
Unflagged 137752 146 Worker Thread <No Name> Normal
Unflagged 140868 151 Worker Thread <No Name> Normal
Unflagged 141324 139 Worker Thread <No Name> Normal
Unflagged 140168 154 Worker Thread <No Name> Normal
Unflagged 141848 0 Worker Thread [Thread Destroyed] Normal
Unflagged 135544 153 Worker Thread <No Name> Normal
Unflagged 142260 140 Worker Thread <No Name> Normal
Unflagged 141528 142 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 141344 0 Worker Thread [Thread Destroyed] Normal
Unflagged 140096 136 Worker Thread <No Name> Normal
Unflagged 141712 134 Worker Thread <No Name> Normal
Unflagged 141688 147 Worker Thread <No Name> Normal

更新:
从那以后,我一直跟踪到罪魁祸首到System.Timers.Timer。即使该计时器在每个Elapsed事件上调用了一个空方法,它仍会无限期地增加逻辑线程数。只需将计时器更改为DispatcherTimer即可解决此问题。

this question中所述,在Windbg中运行 !dumpheap -type TimerCallback时看到了很多计时器后,便开始研究应用程序中的所有计时器。

我仍然想知道如何通过Windbg调试而不是通过导致我修复的disable timers/check performance/repeat方法来检测到该错误。 IE。可以告诉我哪个计时器造成了问题的所有信息。

最佳答案

这通常是由于线程池线程卡住而无法完成引起的。每半秒钟,线程池管理器允许另一个线程开始尝试减少积压。这一直持续到达到ThreadPool.SetMaxThreads()设置的最大线程数为止。默认情况下,数量巨大,四核计算机上为1000。

使用Debug + Windows + Threads查看正在运行的线程。他们的通话堆栈应该清楚表明他们为什么要阻塞。

关于.net - 当前逻辑线程增加/线程堆栈泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9377558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com