.NET人力资源网CPU爆高,是哪个环节或操作导致的疑问?

摘要:一:背景 1. 讲故事 前段时间微信里有一位非训练营学员找到我,说他们的系统在某些时段会cpu爆高,并伴有网络带宽的激增,不知道是什么情况,让我帮忙看下怎么回事,哈哈,说这个故障之前,我先吐槽一下,地狱不空,在社区里我一个人的力量太微弱了,
一:背景 1. 讲故事 前段时间微信里有一位非训练营学员找到我,说他们的系统在某些时段会cpu爆高,并伴有网络带宽的激增,不知道是什么情况,让我帮忙看下怎么回事,哈哈,说这个故障之前,我先吐槽一下,地狱不空,在社区里我一个人的力量太微弱了,这5年来我给行业内开发朋友都是全免费分析,这也让自己不堪重负,不得不考虑收缩,目前非学员首单免费,也只有我的训练营学员才会永久免费分析。给自己的学员分析dump还是比较轻松的,毕竟大家都是有一定的调试体系知识,同根同源。 吐槽完毕,开始本篇的dump分析之旅。 二:CPU爆高分析 1. 为什么会cpu爆高 关于cpu爆高的dump,最好用procdump自动去抓,因为在我的分析之旅中,有不少人手工去抓cpu爆高往往都不大准,还有一点一定要相信数据而不是人言,使用 !tp 观察cpu的利用率。 0:000> !tp CPU utilization: 100% Worker Thread: Total: 20 Running: 5 Idle: 7 MaxLimit: 32767 MinLimit: 12 Work Request in Queue: 0 -------------------------------------- Number of Timers: 2 -------------------------------------- Completion Port Thread:Total: 1 Free: 1 MaxFree: 24 CurrentLimit: 1 MaxLimit: 1000 MinLimit: 12 从卦中看确实cpu被打爆,恰好昨天分析了一个 .net2.0 的dump,可气的是没有 !tp 命令,这就非常考验我们的clr知识了,需要知道 CPU utilization 这个值 sos 是从哪里取得的?如果你看过sscli源代码,应该知道它是 win32threadpool.cpp 的一个全局变量。 SVAL_IMPL(long,ThreadpoolMgr,cpuUtilization); 接下来用 windbg 验证下。 0:000> x clr!ThreadpoolMgr::cpuUtilization 00007ffb`08541558 clr!ThreadpoolMgr::cpuUtilization = <no type information> 0:000> dp clr!ThreadpoolMgr::cpuUtilization L1 00007ffb`08541558 00000000`00000064 0:000> ? 0x64 Evaluate expression: 100 = 00000000`00000064 从卦中看完全对上了,所以dump分析多了,不能对 sos 有太多的依赖。 接下来我们看下cpu的能力,因为自我分析过2core cpu程序之后,我对cpu的健壮性一直都非常好奇,有时候cpu爆高不是业务问题,是 cpu 真的太弱了,接下来使用 !cpuid 观察便知。
阅读全文