公司有个服务偶发CPU100%问题,某天正好工作时间爆出,运维就把内存dump了下来,因此得以分析这个神奇事故。dump文件有38G,本来以为我一定要个64GB的内存才能开这dump文件,然而windbg/vs神奇的并不需要这样,于是我们得以简单的用开发机调试这个文件。
首先同前文一样把符号文件全加载进来。发现当前进程有50个线程,图中第一个线程的堆栈说明他执行了ServiceBase.Run(ServicesToRun),线程在wait状态。
50个线程就能让8核16线程的服务器把cpu跑满说明肯定有哪些线程死锁住了。这时就有神奇的 !runaway 命令查出线程的运行时[……]


