一:背景 1. 讲故事 哈哈,再次见到物流类软件,上个月有位朋友找到我,说他的程序出现了 CPU 爆高,让我帮忙看下什么原因,由于那段时间在苦心研究 C++,分析和经验分享也就懈怠了,今天就给大家安排上. 话不多说,上 windbg 说话. 二:WinDbg 分析 1. CPU 真的爆高吗 既然说 CPU 爆高,那就用 !tp 验证下. 0:000> !tp Method table is shared (not implemented): System.Threading.ThreadPool…
一:背景 1. 讲故事 前几天有位朋友加 wx 抱怨他的程序在高峰期总是莫名其妙的cpu爆高,求助如何分析? 和这位朋友沟通下来,据说这问题困扰了他们几年,还请了微软的工程师过来解决,无疾而终,应该还是没找对微软的大佬... 关于程序CPU爆高的问题,老读者应该知道我都写了好几篇了,基本上归为两类: GC 触发 大量 lock 锁 少部分就是各种莫名其妙的问题了,无法一一列举 ,既然朋友找到我了,我得想办法给他解决,话不多聊,上 windbg. 二: windbg 分析 1. 查看同步块表 遇到…
一:背景 1. 讲故事 前天有位朋友加微信求助他的程序出现了CPU爆高的问题,开局就是一个红包,把我吓懵了! 由于是南方小年,我在老家张罗处理起来不方便,没有第一时间帮他处理,朋友在第二天上午已经找出问题了,反馈说是一个 while(true) 导致的,这就有点意思了,在我分析的众多 CPU 爆高案例中,还真没遇到 while(true) 的情况,一直都抱有遗憾,真是运气好,年前赶上了,哈哈 . 接下来我们就用 windbg 一起来分析下吧. 二:Windbg 分析 1. 查看CPU占用率 一直…
一:背景 1.讲故事 前段时间有位朋友加微信,说他的程序直接 CPU=100%,每次只能手工介入重启,让我帮忙看下到底怎么回事,哈哈,这种CPU打满的事故,程序员压力会非常大, 我让朋友在 CPU 高的时候抓 2 个 dump 下来,然后发给我分析. 二:WinDbg 分析 1. CPU 真的被打满了吗? 为了防止南辕北辙,一定要用 !tp 命令去验证下是不是真的 CPU 爆高. 0:000> !tp CPU utilization: 100% Worker Thread: Total: 21…
一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > 90% 的告警信息,挺尴尬的. 既然找到我,那就用 windbg 分析呗,还能怎么办. 二: windbg 分析 1. 勘探现场 既然说 CPU > 90%,那我就来验证一下是否真的如此? 0:359> !tp CPU utilization: 100% Worker Thread: Total:…
一:背景 1. 讲故事 上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图: 又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的. 抓 2-3 个 dump 第一个:有利于算两份 dump 中的线程时间差,从而推算最耗时线程. 第二个:有时候你抓的dump刚好线程都处理完了,cpu 还未真实回落,所以分析这种dump意义不大,我是吃了不少亏. 优先推测是否为 GC 捣鬼 现在的码农都精怪精怪的,基本不会傻傻的写出个死循环,绝大部…
一:背景 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. 讲故事 前几天有位朋友加wx说他的程序遭遇了内存暴涨,求助如何分析? 和这位朋友聊下来,这个dump也是取自一个HIS系统,如朋友所说我这真的是和医院杠上了,这样也好,给自己攒点资源,好了,不扯了,上windbg说话. 二: windbg 分析 1. 托管还是非托管? 既然是内存暴涨,那就看看当前进程的 commit 内存有多大? 0:000> !address -summary --- State Summary ---------------- RgnCount ------…
一:背景 1. 讲故事 七月中旬有一位朋友加wx求助,他的程序在生产上跑着跑着内存就飙起来了,貌似没有回头的趋势,询问如何解决,截图如下: 和这位朋友聊下来,感觉像是自己在小县城当了个小老板,规律的生活,有当地资源,各种小关系,有一股财务自由的味道,这也是我一直向往的生活方式 . 既然朋友找到我了,我得想办法给他解决问题,既然是内存暴涨,我就赌一把在托管层面吧,嘿嘿,上windbg说话. 二: windbg 分析 1. 托管还是非托管 一直在追这个系列的朋友应该知道,我无数次的用 !addres…