首页 > IT职业 > IT职场 > 记一次 .NET游戏站程序的 CPU 爆高分析
上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图:

又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的。
第一个:有利于算两份 dump 中的线程时间差,从而推算最耗时线程。
第二个:有时候你抓的dump刚好线程都处理完了,cpu 还未真实回落,所以分析这种dump意义不大,我是吃了不少亏????????????。
现在的码农都精怪精怪的,基本不会傻傻的写出个死循环,绝大部分都是遇到某种 资源密集型 或 计算密集型 场景下导致非托管的 GC 出了问题。
好了,有了这个先入为主的思路,接下来就可以用 windbg 去占卜了。
GC 捣鬼的本质是 GC 出现了回收压力,尤其是对 大对象堆 的分配和释放,大家应该知道 大对象堆 采用的是链式管理法,不到万不得已 GC 都不敢回收它,所以在它上面的分配和释放都是一种 CPU密集型 操作,不信你可以去 StackOverflow 上搜搜 LOH 和 HighCPU 的关联关系????????????。
在 windbg 中有一个快捷命令 x ,可用于在非托管堆上检索指定关键词,检索之前先看看这个 dump 是什么 Framework 版本,决定用什么关键词。
0:050> lmv
start end module name
00b80000 00b88000 w3wp (pdb symbols) c:mysymbolsw3wp.pdb来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1499/viewspace-2797698/ ,如需转载,请注明出处,否则将追究法律责任。