1.背景
公司服务器A,每天的cpu非常高,但是看代码又看不出啥问题,解决方案只能一味的增加配置
为了找出根源,让运维在服务器上任务管理器上 创建转存文件,保存dump文件后采用windbg进行分析
2.使用windows的windbg工具
然后执行命令:
.loadby sos clr
!runaway
结果如下:
看着这样的结果,16 代表threadId,后面的时间是线程持续时间,然后找到一个进行分析,找一下时间比较长的 比如id=44的 持续时间是44s的线程
输入~44s:
然后输入:!clrstack
这个结果可以看到里面有几个业务相关的点:
第一:使用了文件相关的逻辑,FileStream==》Helpers.FileHeper.FileInUse,代码中发现这个方法在Lunz.Trace里面使用的,需要关注这块
第二:关于缓存Cache,里面有LocalObjectCacheStrategy,以及LocalCacheLock,这块也要看一下是否存在问题