目录 一:背景 1. 讲故事 二:Windbg 分析 1. 线程们都怎么了 2. 单例写法真的没问题吗 3. 验证我的想法 4. 后续 三:总结 一:背景 1. 讲故事 10月份星球里的一位老朋友找到我,说他们公
目录
- 一:背景
- 1. 讲故事
- 二:Windbg 分析
- 1. 线程们都怎么了
- 2. 单例写法真的没问题吗
- 3. 验证我的想法
- 4. 后续
- 三:总结
一:背景
1. 讲故事
10月份星球里的一位老朋友找到我,说他们公司的程序在一个网红直播带货下给弄得无响应了,无响应期间有大量的 RabbitMQ 超时,寻求如何找到根源,聊天截图我就不发了。
既然无响应了,那必然是程序的大量线程被主动或者被动的挂起,朋友也很及时的从程序上抽了一管血下来,接下来就上 windbg 一起探究下到底发生了什么?
二:Windbg 分析
1. 线程们都怎么了
要想看所有线程,还是老命令 !t 。
0:000> !t ThreadCount: 5221 UnstartedThread: 0 BackgroundThread: 5199 PendingThread: 0 DeadThread: 21 Hosted Runtime: no Lock DBG ID OSID ThreadOBJ State GC Mode GC Alloc Context Domain Count Apt Exception 20 1 74e4 00000276CB778180 202a020 Preemptive 0000000000000000:0000000000000000 00000276cb77c9d0 -00001 MTA 31 2 42cc 00000276CB6CA830 2b220 Preemptive 0000000000000000:0000000000000000 00000276cb77c9d0 -00001 MTA (Finalizer) 32 3 2b40 00000276CB85D1B0 102a220 Preemptive 0000000000000000:0000000000000000 00000276cb77c9d0 -00001 MTA (Threadpool Worker) 2 6 bccc 00000276CBA5D2F0 20220 Preemptive 0000000000000000:0000000000000000 00000276cb77c9d0 -00001 Ukn 33 9 7224 00000276CBA5C0C0 3029220 Preemptive 0000000000000000:0000000000000000 00000276cb77c9d0 -00001 MTA (Threadpool Worker) System.IO.IOException 00000279ccc56cd0 9 23 29e0 0000027BD86FD180 20220 Preemptive 0000000000000000:0000000000000000 00000276cb77c9d0 -00001 Ukn ...
从简要信息看,当前有 5000+ 的线程,太牛了,一般一台机器的所有进程的线程加起来也没这么多。。。不过我目前看到最多的是 1w + 的线程