利用windbg 分析IIS 的线程池w3wp程序多线程挂起问题
前几天有个朋友发个了在windows server 2008跑的IIS 跑的程序w3wp程序dmp,要我帮忙分析为何线程都挂起不运行
经过查阅资料用windbg可以调试可以输出线程的调用堆栈,但是准备调试之前费了不少功夫和时间
主要碰到是SOS.DLL和DMP 文件运行时候的CLR.DLL不匹配问题,那就需要从w3wp运行的机器上拷贝到对应.net版本下面的sos.dll,clr.dll,mscordacwks.dll文件
然后给windbg 加载,主要是通过.load 命令,卸载扩展DLL命令是.unload ,查看当前加载的DLL命令是.chain

还需要设置好windbg 的调试符号

下载好符号后,输入下面命令,没出现文件不匹配提示就表示可以使用SOS.dll的扩展命令
0:000> !clrstack
OS Thread Id: 0x1cc4 (0)
Unable to walk the managed stack. The current thread is likely not a
managed thread. You can run !threads to get a list of managed threads in
the process
Failed to start stack walk: 80070057
如果出现下面情况,就是文件不匹配,你需要具体查看加载的SOS.DLL文件版本,
0:033> !clrstack The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you are debugging. CLR Version: 4.0.30319.1008 SOS Version: 4.0.30319.1022

有时候运行机器未必 能找到对应版本的SOS.dll 你就必须要到微软官网上面找到对应系统补丁的里面的.NET版本SOS.DLL
解压出微软补丁的工具msix 具体怎么用百度或者谷歌下
查阅线程 !runaway 或者!threads
0:000> !runaway
User Mode Time
Thread Time
52:13b0 0 days 0:00:23.421
41:1124 0 days 0:00:18.359
42:1cf4 0 days 0:00:11.687
44:1d64 0 days 0:00:09.390
14:13ec 0 days 0:00:07.375
16:1c08 0 days 0:00:07.171
19:1d60 0 days 0:00:06.640
18:1cc8 0 days 0:00:06.640
15:f64 0 days 0:00:06.437
17:f88 0 days 0:00:06.375
经过查阅资料 查询所有线程调用堆栈~*e !clrstack 或者!EEStack -EE 后者的命令打印比较好看些
0:000> ~*e !clrstack
OS Thread Id: 0x954 (48)
Child SP IP Call Site
0000000011a3e538 000000007793c0ea [GCFrame: 0000000011a3e538]
0000000011a3e608 000000007793c0ea [HelperMethodFrame_1OBJ: 0000000011a3e608] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
0000000011a3e720 000007fe99aef61f Disruptor.BlockingWaitStrategy.WaitFor(Int64, Disruptor.Sequence, Disruptor.Sequence[], Disruptor.ISequenceBarrier)
0000000011a3e780 000007fe99aef548 Disruptor.ProcessingSequenceBarrier.WaitFor(Int64)
0000000011a3e7c0 000007fe99aeefcb Disruptor.BatchEventProcessor`1[[System.__Canon, mscorlib]].Run()
0000000011a3e840 000007fef7b3c1de System.Threading.Tasks.Task.Execute()
0000000011a3e8b0 000007fef7bed0b5 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
0000000011a3ea10 000007fef7bece19 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
0000000011a3ea40 000007fef7b3bf10 System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)
0000000011a3eb30 000007fef7b3bca5 System.Threading.Tasks.Task.ExecuteEntry(Boolean)
0000000011a3eb70 000007fef7b2764a System.Threading.ThreadPoolWorkQueue.Dispatch()
0000000011a3f0c8 000007fef90b9e03 [DebuggerU2MCatchHandlerFrame: 0000000011a3f0c8]
0000000011a3f2a8 000007fef90b9e03 [ContextTransitionFrame: 0000000011a3f2a8]
0000000011a3f498 000007fef90b9e03 [DebuggerU2MCatchHandlerFrame: 0000000011a3f498]
0:000> !EEStack -EE
Thread 42
Current frame:
Child-SP RetAddr Caller, Callee
00000000171fd990 000007fef4402108 (MethodDesc 000007fef4132438 +0x68 System.Threading.ExecutionContextSwitcher.Undo())
00000000171fd9e0 000007fef4401c0f (MethodDesc 000007fef40104e8 +0x19f System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean))
00000000171fdd20 000007fef43e8ce0 (MethodDesc 000007fef4024840 +0xe0 System.Text.StringBuilder.Append(System.String))
00000000171fdf00 000007fef51475e2 (MethodDesc 000007fef400d340 System.Runtime.Remoting.Messaging.LogicalCallContext.Clone())
00000000171fdf50 000007fef4449282 (MethodDesc 000007fef413cd18 +0x302 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken))
00000000171fe030 000007fef4449282 (MethodDesc 000007fef413cd18 +0x302 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken))
00000000171fe0c0 000007fef4441bf7 (MethodDesc 000007fef4016870 +0xb7 System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken))
00000000171fe130 000007fef4d89942 (MethodDesc 000007fef4016860 +0x222 System.Threading.Tasks.Task.InternalWait(Int32, System.Threading.CancellationToken))
00000000171fe150 000007fef1c4c88d (MethodDesc 000007fef1c31d58 +0x3d System.Net.Http.HttpUtilities.ContinueWithStandard[[System.__Canon, mscorlib]](System.Threading.Tasks.Task`1<System.__Canon>, System.Action`1<System.Threading.Tasks.Task`1<System.__Canon>>))
00000000171fe220 000007fef4d86687 (MethodDesc 000007fef402d0a8 +0x27 System.Threading.Tasks.Task`1[[System.__Canon, mscorlib]].GetResultCore(Boolean))
00000000171fe260 000007fe9ac40c0b (MethodDesc 000007fe9a085250 +0x1cb WebMvc.App_Start.FileUploadSDK+<>c.<UploadHTML>b__11_0(System.Object))
00000000171fe350 000007fef4401bce (MethodDesc 000007fef40104e8 +0x15e System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean))
00000000171fe420 000007fef4401a67 (MethodDesc 000007fef40104d8 +0x17 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean))
00000000171fe430 000007fef43c5eb5 (MethodDesc 000007fef4152010 +0x2e5 System.Threading.ThreadPoolWorkQueue.Dispatch())
00000000171fe450 000007fef439c0a0 (MethodDesc 000007fef402f670 +0x70 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem())
00000000171fe490 000007fef43c5d30 (MethodDesc 000007fef4152010 +0x160 System.Threading.ThreadPoolWorkQueue.Dispatch())
00000000171fe7f0 000007fef3290a2e (MethodDesc 000007fef2ff8d38 +0x7e DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef))
00000000171fe850 000007fef322720e (MethodDesc 000007fef2fd7d90 +0x65e System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32))
00000000171fea00 000007fef3226b84 (MethodDesc 000007fef2fd7d80 +0x14 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32))
---------------------------------------------
参考资料
https://msdn.microsoft.com/en-us/library/bb190764(v=vs.110).aspx?query=
http://www.cnblogs.com/softfair/p/The_version_SOS_not_match_version_of_CLR_PDB_symbol_for_clr_dll_not_loaded.html
https://www.cnblogs.com/zrhai/p/3784206.html
利用windbg 分析IIS 的线程池w3wp程序多线程挂起问题的更多相关文章
- Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理
相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...
- C# -- 使用线程池 ThreadPool 执行多线程任务
C# -- 使用线程池 ThreadPool 执行多线程任务 1. 使用线程池 class Program { static void Main(string[] args) { WaitCallba ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏
Windbg的一些简单使用命令 一.崩溃 1. 输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2. 查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame 0,切到第0 ...
- Windows下利用Windbg 分析dump
概述: 注册生成dump文件的函数. 当程序收到没有捕获的异常时,调用上述函数,生成dump文件. 利用Windbg结合编译程序时生成的pdb和代码来分析dump文件,定位问题. 如下代码生成dump ...
- 利用ACE 自己实现的线程池
1: 线程池组件的配置文件: [log] ;DEBUG = 0 ;INFO = 1 ;WARN = 2 ;FAULT = 3 level=0 ;SCREENOUT = 0 ;FILEOUT = 1 ; ...
- 利用LogParser分析IIS日志
LogParser是微软官方出品的用于读取分析IIS日志的工具,使用类SQL语句过滤文本日志内容,并可将内容导出到csv.sqlserver作进一步分析 下载地址:http://www.micr ...
- 利用Windbg分析Magicodes.IE一次错误编写导致内存剧增
由于这近一年时间一直忙于写书和工作,一直没有水文,但是近期有几位朋友使用我们的Magicodes.IE反馈在导出过程中内存暴涨...好吧,不管怎样,不能苦了我们朋友,接下来我们通过windbg来看一下 ...
- java 多线程 线程池:多核CPU利用ExecutorService newWorkStealingPool; ForkJoinPool线程池 执行可拆分的任务RecursiveAction;RecursiveTask
1,给定并行级别: 1,ExecutorService newWorkStealingPool(int parallelism): 创建持有足够的线程的线程池来支持给定的并行级别,该方法还会使用多个队 ...
随机推荐
- day4总结
函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或 ...
- 使用discovery板上的st-link给别的板子下载
discovery板上的6pin swd接口 20pin 的jtag 接线: 6 20 def 1 1 目标vdd 2 9 swclk(PA14) 3 20 gnd 4 7 swdio(PA13) ...
- (4) 二叉平衡树, AVL树
1.为什么要有平衡二叉树? 上一节我们讲了一般的二叉查找树, 其期望深度为O(log2n), 其各操作的时间复杂度O(log2n)同时也是由此决定的.但是在某些情况下(如在插入的序列是有序的时候), ...
- Mac环境下JDK安装方法
1.版本 MAC OS 10.10.3 JDK:jdk1.8.0_40 jdk下载mac版本的:http://www.oracle.com/technetwork/java/javase/downlo ...
- dmidecode查看设备硬件信息
在bash里输入:dmidecode -s system-product-name 或者lshw -class system 在Linux系统环境下(CentOS .4和Ubuntu .04已确认), ...
- 源码剖析——深入Windows句柄本质
参考资料: 1. http://www.codeforge.cn/read/146318/WinDef.h__html windef.h头文件 2. http://www.codeforge.cn/r ...
- Missing artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0
maven构建项目的时候遇到这个错误: 一.直接原因 制定路径下确实没有sqljdbc4.jar文件. 二.根本原因 微软不允许以maven的方式直接下载该文件. 三.解决办法 3.1 手动下载相关库 ...
- OpenCV2+入门系列(一):OpenCV2.4.9的安装与测试
这里假设看到这篇文章的人都已经对OpenCV以及机器视觉等最基础的概念有了一定的认识,因此本文不会对OpenCV做任何的介绍,而是直接介绍OpenCV2.4.9的安装与测试.此外本文只是简单的介绍如何 ...
- Grafana + Zabbix --- 部署分布式监控系统
阅读目录: 1. 关闭防火墙 2. 安装Zabbix下载源 3. ZabbixClient --- 安装zabbix-agent代理 4. ZabbixServer --- 安装zabbix-ser ...
- 一个简单的JAVA C/S多线程应用
import java.net.*;import java.io.*;public class simpleServer{private static ServerSocket serverSoc ...