1、首先下载Windbg
2、打开Windbg 设置 File-〉Symbol Search Path 地址如下
C:\ Symbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols";SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols
3、打开Windbg 将进程转存的进程文件 拉进Windbg
4、在Windbg界面 输入加载命令 .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll 加载sos.dll
5、运行 !runaway 命令 runaway 命令 有三种模式
!runaway命令显示每个线程消费的时间
-
Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1
Bit 1 (0x2) 显示每个线程消耗的内核时间(kernel time)。
Bit 2 (0x4) 显示每个线程从创建开始经历了多少时间。
就是三者的组合:1 2 3 4 5 6 7
运行!runaway 1
![](https://i-blog.csdnimg.cn/blog_migrate/1f5f111ae830e8f39c63765e9fe57e27.png)
28线程占用的内核时间最长,其次是 35 37,
~28s 切换到线程28
6、查看线程的调用堆栈 !clrstack 察看的是ManagedCode的堆栈
7 !dumpstack查看native和managed的堆栈
8、有的时候线程池会使造成问题的根本原因 使用 !threadpool 查看,针对 我本地的这个问题 可以看到就是因为线程池问题引起的