一:背景 1. 讲故事 上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图: 又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的. 抓 2-3 个 dump 第一个:有利于算两份 dump 中的线程时间差,从而推算最耗时线程. 第二个:有时候你抓的dump刚好线程都处理完了,cpu 还未真实回落,所以分析这种dump意义不大,我是吃了不少亏. 优先推测是否为 GC 捣鬼 现在的码农都精怪精怪的,基本不会傻傻的写出个死循环,绝大部…
一:背景 1. 讲故事 这个月初,一位朋友加微信求助他的程序出现了 CPU 偶发性爆高,希望能有偿解决一下. 从描述看,这个问题应该困扰了很久,还是医院的朋友给力,开门就是 100块 红包 ,那既然是偶发性爆高,人工不行,还得用 procdump 自动抓,用 procdump -ma -s 5 -n 2 -c 70 w3wp 埋伏好,几天后如愿生成了两个dump,太妙了,接下来就用 windbg 分析吧. 二:Windbg 分析 1. 真的是cpu爆高吗 一切只相信数据,这里用 !tp 看一下此…
一:背景 1. 讲故事 前几天有位朋友加 wx 抱怨他的程序在高峰期总是莫名其妙的cpu爆高,求助如何分析? 和这位朋友沟通下来,据说这问题困扰了他们几年,还请了微软的工程师过来解决,无疾而终,应该还是没找对微软的大佬... 关于程序CPU爆高的问题,老读者应该知道我都写了好几篇了,基本上归为两类: GC 触发 大量 lock 锁 少部分就是各种莫名其妙的问题了,无法一一列举 ,既然朋友找到我了,我得想办法给他解决,话不多聊,上 windbg. 二: windbg 分析 1. 查看同步块表 遇到…
一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > 90% 的告警信息,挺尴尬的. 既然找到我,那就用 windbg 分析呗,还能怎么办. 二: windbg 分析 1. 勘探现场 既然说 CPU > 90%,那我就来验证一下是否真的如此? 0:359> !tp CPU utilization: 100% Worker Thread: Total:…
一:背景 1. 讲故事 哈哈,再次见到物流类软件,上个月有位朋友找到我,说他的程序出现了 CPU 爆高,让我帮忙看下什么原因,由于那段时间在苦心研究 C++,分析和经验分享也就懈怠了,今天就给大家安排上. 话不多说,上 windbg 说话. 二:WinDbg 分析 1. CPU 真的爆高吗 既然说 CPU 爆高,那就用 !tp 验证下. 0:000> !tp Method table is shared (not implemented): System.Threading.ThreadPool…
一:背景 1. 讲故事 这是6月中旬一位朋友加wx求助dump的故事,他的程序 cpu爆高UI卡死,问如何解决,截图如下: 在拿到这个dump后,我发现这是一个关于机械臂的MRS程序,哈哈,在机械臂这种智能机器人领域居然还有 .NET 的用武之地,有点超出我的认知哈,不知道把员工当兄弟的大强子仓库里可有 .NET 控制的几台机械臂 . 关于界面卡死的问题我这里就不讨论了,只讨论这个cpu爆高的问题如何解决,毕竟追这个系列的朋友都被前面那些各种 内存泄漏,内存爆涨 弄倦了,换个口味也挺好. 二:…
一:背景 1. 讲故事 前几天有位朋友wx求助,它的程序内存经常飙升,cpu 偶尔飙升,没找到原因,希望帮忙看一下. 可惜发过来的 dump 只有区区2G,能在这里面找到内存泄漏那真有两把刷子...,所以我还是希望他的程序内存涨到 5G+ 的时候再给我看看,既然内存看不了,那就看看这个偶尔飙升的CPU是个啥情况?老办法,上windbg说话. 二: windbg 分析 1. CPU 到底是多少 要想查看这个快照生成时机器的cpu使用率,可以使用 !tp 命令. 0:033> !tp CPU uti…
一:背景 1. 讲故事 前几天有位朋友wx求助,它的程序CPU经常飙满,没找到原因,希望帮忙看一下. 这些天连续接到几个cpu爆高的dump,都看烦了,希望后面再来几个其他方面的dump,从沟通上看,这位朋友表现的好惨,可能实际更惨,那既然找到我了,我就尽最大能力帮他找到幕后真凶,话不多说,上 windbg. 二: windbg 分析 1. 查看托管线程 因为线程都是靠cpu养着,所以从线程上入手也是一个很好的思路,要想查看程序的所有托管线程,可以使用 !t 命令. 0:000> !t Thre…
一:背景 1. 讲故事 前天有位朋友加微信求助他的程序出现了CPU爆高的问题,开局就是一个红包,把我吓懵了! 由于是南方小年,我在老家张罗处理起来不方便,没有第一时间帮他处理,朋友在第二天上午已经找出问题了,反馈说是一个 while(true) 导致的,这就有点意思了,在我分析的众多 CPU 爆高案例中,还真没遇到 while(true) 的情况,一直都抱有遗憾,真是运气好,年前赶上了,哈哈 . 接下来我们就用 windbg 一起来分析下吧. 二:Windbg 分析 1. 查看CPU占用率 一直…
一:背景 1. 讲故事 年前有位朋友加微信求助,说他的程序出现了偶发性CPU爆高,寻求如何解决,截图如下: 我建议朋友用 procdump 在 cpu 高的时候连抓两个dump,这样分析起来比较稳健,朋友也如期的成功抓到,接下来就用 windbg 一起来分析下吧. 二:Windbg 分析 1. 查看CPU占用率 先用 !tp 查看两个 dump 的cpu 利用率 0:112> !tp CPU utilization: 100% Worker Thread: Total: 138 Running:…