暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Dump分析】记一次工控软件CPU100%异常

图控大叔 2022-10-24
1301

 

前言

 

     今天刚好是1024程序员的节日,还以为可以平稳度过,想不到早上客户现场就传来消息,今天软件打开复位都正常,但是做几颗料之后就卡了,看任务管理器发现CPU占用接近100%或者达到了100%。说的我心慌,因为最近都没有更新程序到现场,怎么会突然出现这种情况。还是老办法,先让客户现场帮忙生成一下dump文件发回来看看。

 

状况

 

 拿到dump文件后,我用!tp指令看了它的CPU情况,确实达到了100%



从这里来看,软件运行时间才10分钟,CPU就起飞了,这个是什么情况,让人摸不着头脑。


分析

 

记得之前看其他博主关于此类的分析,CPU过高,可能是GC调用频繁导致,于是我看看是不是因为这个原因导致。


但是从这里来看,并没有发现GC的字样。


那会不会是第二种原因呢?例如内存抛出数量过多导致的呢?于是我查看了一下异常情况




从结果来看,并不是这个原因。只能找其他办法,于是我查看了所有的线程堆栈情况。使用指令:~*e !clrstack


这里就发现问题了,发现有好多个线程都处于等待状态。例如如下线程




找到可疑点

 

 继续往下找,发现了有趣的情况,从函数名称来看是在删除图片,

    UserData.ImageHelper.DeleteImage(System.String, Double, Double)

    但是为什么那么多个线程进行同样的动作呢?





    根据这个线索,找到了代码



    有人可能会问,为什么删除图片能导致CPU暴涨甚至达到100%,这里是因为它执行的删除不是删除一张图片,而是很多张,而且每个产品节拍结束都开一个线程Task去做这个操作。但是以前又没有的情况,就很奇怪,后来,我在这里加了锁之后更新到现场,后面跑料就没有这个情况了。修改如下


    好了,bug修复,终于觉得学习windgb是一件非常有用的事情

    文章转载自图控大叔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论