• Asp.net IIS w3wp.exe占CPU100%的排查方案


    最近应用偶发性的出现cpu100%占用过高的报警,因为项目比较大,流程涉及非常多,地毯式排查已经不可能。

    解决办法目前来看最快捷的莫过于WinDbg分析dmp文件。下面详细步骤介绍一下:

    1、如何捕获dmp文件

    两个办法,第一个可以通过阈值的方式,让服务器在cpu到达一定比例的时候,自动打印dmp文件,详细见:

    https://www.cnblogs.com/mamingbo/p/5656104.html

    具体我们有实际操作过。

    第二个办法,是直接在服务器cpu报警100%的时候,通过任务管理器,转存储文件为dmp

    注意上面这步骤,可能会影响正在运行的生产环境,存储预估可能要1分钟左右

    2、将dmp文件拷贝到自己本地电脑,同时在服务器对应目录下拷贝如下dll 所在位置:C:WindowsMicrosoft.NETFramework?version?SOS.dll 同目录下(sos.dll clr.dll mscordacwks.dll 三个dll拷贝下来)

    dmp和dll拷贝到自己的本机备用,例如D:dump

    3、安装WinDbg,(https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools)

    4、开始分析调试,打开WinDbg,文件-->Open Dump File 加载刚刚的dmp文件

    第一个命令:.cordll -lp D:dump 指向刚刚的dll所在路径

    第二个命令:!runaway,分析dmp文件

    马上可以看到哪些进程是消耗Time最长的,时间越长占用的cpu时间越久,这样就可以分析那个线程的问题了。

    例如上图中的,19:xxxx,23:xxxx,41:xxx是时间最长的线程,下一步进入到线程里,分析是那个方法导致的

    5、定位问题,首先进入线程,命令:~19,意思是19这个线程。然后执行!clrstack,问题顿显,查看具体是哪个方法导致的。

     6、至此分析结束,问题找到。同时你会发现.net framework 的GC真的是cpu大户,尽快转.net 5吧

    如果您认可我的工作,并且觉得本文对您有所帮助,可以通过支付宝或转发文章的方式资助我们,我们愿意接受来自各方面的捐赠。再次感谢您对开源事业的赞助和支持!
    文章部分内容可能摘自网络,如果侵犯您的权益,请及时联系我,谢谢.

    作者:JackChain
  • 相关阅读:
    Pollard rho模板
    GDKOI2018游记
    BZOJ2599: [IOI2011]Race
    Codeforces914E. Palindromes in a Tree
    可以删点的并查集
    本月题量 180122晚-180222午
    51nod1238 最小公倍数之和 V3
    51nod1237 最大公约数之和 V3
    hdu5608:function
    51nod1244 莫比乌斯函数之和
  • 原文地址:https://www.cnblogs.com/qidian10/p/14295184.html
Copyright © 2020-2023  润新知