一.背景

先说下windbg使用场景.各位coder在工作中或多或少都会遇到下面四种情况

1.本地代码好好的,放服务器上运行一段时间后,IIS服务突然占用 w3wp.exe CPU突然100% ,不得不回收应用程序池,如果哪次回收晚了,被客户发现,后果很痛苦~

2.你的w3wp.exe 内存高居不下 并且逐步上升

3.cpu很低,内存也很低,但你的网页打开却越来越慢,而你该做的优化都做过了,却没有任何效果..

4.你的程序本地运行好好的,但是到服务器上了,在某个时候会突然报错,再次刷新却又好了。而偏偏是客户操作的报错,你自己访问正常,会让你非常苦恼。

而最痛苦的是,你是负责维护的,刚接手项目没多久,不懂技术的老板直接就让你解决,根本不管这代码是不是你写的(我目前就这环境)。上述情况第四点 还有 会有一些系统日志等帮你分析,而前三点则没有任何

报错信息等供你参考,加上上万行的代码不是你写的,你根本不可能一行行的去看...这个时候 windbg就可以用上了~~

二.问题描述以及工具准备

老板:有个项目w3wp.exe CPU100%了 到时网页打开非常慢,你赶紧去看下,今天处理好...

我:呵呵..

最近的工作全是这样,什么CPU100,内存满了等 因为代码不是我写的,写这个代码的3年前就走了...于是开始准备神奇windbg

这里一定要注意 windbg 有32位和64位 不要下载错了。微软官网即可下载到,不过现在是在线安装的,会装其他很多东西,而且安装的很慢..

于是,登录到生产环境上,如果你很幸运,是win2008 服务器,自带的就有抓dump.那么点击任务管理器,找到CPU100%的进程,然后右键创建转储文件,稍等片刻后,dump就抓下来了~

如果你是win03服务器,也没关系,后面告诉你抓去方式~

下面是下载包地址

微软官方在线安装下载地址:http://msdn.microsoft.com/en-us/windows/hardware/hh852365

独立快速安装包:http://download.csdn.net/detail/zhang957411207/4750492

64位离线安装包:http://download.csdn.net/detail/lazry/5555291

三.分析开始

1.先通过windbg打开dump包  并设置好符号文件

2.载入sos.dll  执行.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.DLL
( 我是4.0 的 注意版本 64位)

3.执行几个常见指令 开始分析  我总结下 cpu问题 执行这几个指令

!threadpool  查看当前CPU状况 线程数等等

!runaway  查看那几个线程使用的高 建议多抓几个dump 然后确定到底是哪个线程

~线程IDs 跳转到那个线程

!clrstack 看看这个线程再干嘛 执行那些方法

!clrstack -p  具体方法的参数值地址

!do 地址  查看参数值

这样问题基本就能找到了  下面看实际操作图

四.解决

好了,看到最后都是停留在字典类的操作上

就是这些对字典的操作导致CPU100%..windbg只能帮你到这里了。调试重要的是思想,不是工具。

可是这些字典的操作,为啥么会导致CPU100% 很平常的操作啊  这时看下源码..发现字典是静态的  这个静态字典做缓存。这是很多人的做法...代码大概都是这样

于是,微微一笑...你们啊,毕竟还是图样图森破..只知道字典做缓存,却不知道这种情况要考虑线程安全么...字典类不是线程安全的 所以导致CPU。为了印证猜想

去搜了一下 MSDN上有介绍  字典类型导致CPU100%

http://blogs.msdn.com/b/tess/archive/2009/12/21/high-cpu-in-net-app-using-a-static-generic-dictionary.aspx

复合猜想,猜想正确.果然是这样的原因。

于是果断使用了.net4.0提供的线程安全的字典类 ConcurrentDictionary  也可以使用lock解决~

从此..世界太平了

顺便说下  不要一听到CPU100% 都说死循环导致的 谁没事写死循环啊... 很多时候 都是各种阻塞造成的 IO阻塞等   看似很平常的代码 都会造成CPU100%的~

五.配合windbg使用的工具

有的时候 我们希望在程序出错时 或者CPU100%时 等情况时 自动抓去dump  这个时候 可以使用

Debug Diagnostic Tool  用这个可以自动抓取 并且自带分析功能 非常方便 支持各种操作系统 解决上面只能08的问题

其次 分析系统问题 有的时候非常复杂 因为有可能会遇到不是代码引起的,这个时候一定要利用好 windows自带的性能检测

利用好这个 会给你分析带来很大的灵感~

(比如 因为配置文件 config 配置的debug=true 导致的问题 )

六.后续

如果你的程序员也正在受到上面介绍的4种情况困扰,可以把dump抓下来给我,我可以帮忙分析修改

一个只要1块钱 长期包年帮忙解决 只要12元 还赠送价值22元的无空格键盘....你还等什么....前10个联系的更有1折优惠,对,你没听错,就是1折...赶紧发短消息联系我吧...

下一篇 内存高的案例分析

最后 真诚提前祝大家新年快乐!!

QQ群推荐 33353329

利用windbg查找dictionary导致IIS占CPU100%案例分析(一)的更多相关文章

  1. Dictionary导致IIS CPU 100%案例分析 学会使用WinDbg工具

    .NET  开发注意 线程安全性问题.弄不好可能会导致CPU满载 特别主要 Dictionary作为静态变量使用的情况. 解决方法: Dictionary 换成  ConcurrentDictiona ...

  2. MySQL Online DDL导致全局锁表案例分析

    MySQL Online DDL导致全局锁表案例分析 我这边遇到了什么问题? 线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃 ...

  3. 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 云原生场景,相比于传统的IDC场景,业务更加复杂 ...

  4. 利用Windbg分析Magicodes.IE一次错误编写导致内存剧增

    由于这近一年时间一直忙于写书和工作,一直没有水文,但是近期有几位朋友使用我们的Magicodes.IE反馈在导出过程中内存暴涨...好吧,不管怎样,不能苦了我们朋友,接下来我们通过windbg来看一下 ...

  5. [引用]SQLServer占CPU100%

    程序猿是如何解决SQLServer占CPU100%的   文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 ...

  6. Dictionary导致CPU暴涨

    中午吃完饭回来,刚想眯一会,突然发现公司预警群报警,某台机器CPU100%,连续三次报警,心里咯噔一下,我新开发的程序就在这上面,是不是我的程序导致的?立马远程,oh my god,果然是. 二话不说 ...

  7. Mybatis 并发执行导致cpu占满的问题

    最近线上服务经常 出现cpu达到100%的问题,发现都是执行oracle操作的方法就没有返回.经过排查,最后定位到cpu消耗在以下方法 System.Collections.Generic.Dicti ...

  8. Windows下利用Windbg 分析dump

    概述: 注册生成dump文件的函数. 当程序收到没有捕获的异常时,调用上述函数,生成dump文件. 利用Windbg结合编译程序时生成的pdb和代码来分析dump文件,定位问题. 如下代码生成dump ...

  9. 调试技巧 —— 如何利用windbg + dump + map分析程序异常

    调试技巧 —— 如何利用windbg + dump + map分析程序异常 逗比汪星人2011-09-04上传   调试技巧 —— 如何利用windbg + dump + map分析程序异常 http ...

随机推荐

  1. php示例代码之使用MySQLi接口

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  2. 使用虚拟信用卡认证openshift铜牌计划

    "铜牌计划(bronze)"是OpenShift推出的一项免费计划,这个计划能为你提供更多的免费便利,主要就是可以自己绑域名加SSL证书和应用即使24小时没人访问也不关机了.说这个 ...

  3. JavaScript Patterns 7.1 Singleton

    7.1 Singleton The idea of the singleton pattern is to have only one instance of a specific class. Th ...

  4. 走进云背后:微软Azure web 项目通过web service部署web site

    探索云那不为人知的故事(一):Web Services部署web site 前奏:Windows Azure是微软基于云计算的操作系统,现在更名为“Microsoft Azure”,和Azure Se ...

  5. Linux下NDK编译FFMPEG包含neon参数

    FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...

  6. 56相册视频(土豆相册视频 激动相册视频 QQ动感影集等)——下载教程

    由于目前流行的相册视频或影集大多是由Flash.音乐和图片组合而成的动画,不属于完整视频,所以不能用常规的解析方法下载. 鉴于很多朋友希望可以下载自己精心制作的相册,故在本教程中,我们将以图文并茂的方 ...

  7. 解决Python2.7的UnicodeEncodeError: 'ascii' codec can’t encode异常错误

    import sys reload(sys) sys.setdefaultencoding('utf-8') 好了,通过上面短短的三行,我们算是很好的解决了这个问题了,同样的方式也可以应用到Unico ...

  8. Unity3d Asset Server启动问题

    周末机房停电后asset server无法启动,点击启动出现“asset server could not start server”. 几经周折,找到原来是用户问题,解决办法如下: 1.命令行输入“ ...

  9. finereport与OA系统集成的完全方案

    随着社会信息化高速发展,企业信息化也得到了一定提高,而如何提高办公效率已经成为企业一项重要而紧迫的任务,传统的纸质报表等档案不仅浪费纸张.不易存档.不易调阅.不易统计,如何更有效.更快速提升办公效率和 ...

  10. CodeForces 466E Information Graph --树形转线性+并查集

    题意:有三种操作: 1.新增一条边从y连向x,此前x没有父节点 2.x接到一份文件,(文件标号逐次递增),然后将这份文件一路上溯,让所有上溯的节点都接到这份文件 3.查询某个节点x是否接到过文件F 解 ...