问题:

web服务器w3wp CPU占用率非常高,导致整个服务器CPU 100%占用,问题无法正常重现

解决方法:

--问题尚未解决,此处记录目前的解决状态

1)下载windbg

参考https://blog.csdn.net/johnsonblog/article/details/8165861

最终的下载地址:

http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

2)将windlb安装在服务器(本地也可以),内存转储文件可能很大(G级别),推荐直接安装在服务器,避免复制dmp文件

默认目录为:C:\Program Files\Debugging Tools for Windows (x64)

3)创建进程转储问题,找到cpu占用最高的w3wp,右键,创建转储文件,若成功,则会提示转储文件的地址,一般放在C:\Users\Administrator\AppData\Local\Temp\X

4)  用windbg打开转储文件分析,打开的菜单为Fille->Open Crash Dump 或者按Ctrl + D

5)  输入命令分析,找到正在执行的代码

 参考:https://improve.dk/debugging-in-production-part-1-analyzing-100-cpu-usage-using-windbg/

概要:

在打开的窗口下面的输入框中依次输入:

加载dotNet分析工具: !loadby sos clr
查到正在运行的线程:     !runaway
运行这个命令后,找到执行时间最长的线程,一般是第一个,找到线程的id
选择线程,输入:~Xs 将X换成线程Id
加载线程的调用堆栈:!CLRStack
现在可以看到代码了。
---
服务器dump了一个,CLRStatck的时候报错:

PDB symbol for clr.dll not loaded,查看资料是 mscordacwks.dll版本不匹配,研究了半天,没搞定

https://blogs.msdn.microsoft.com/dougste/2009/02/18/failed-to-load-data-access-dll-0x80004005-or-what-is-mscordacwks-dll

https://github.com/Microsoft/WinObjC/wiki/Debugging-Stack-Traces-from-Crash-Dumps

最后,安装了Windbg Preview(直接在win10市场中安装),用其打开dump文件,输入几个命令后,它自己下载了符号文件,命令终于可以运行了。

最终发现问题是老代码有个地方用到了静态的Dictionary<>,Dictionary<>不是线程安全的,不应该作为静态字段用在web程序中。

000000397797d7c0 00007ffdabdb8d2e System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].FindEntry(System.__Canon)
000000397797d830 00007ffd519cca81 ModelBLL.GetModel(System.String)
												

w3wp CPU 100%问题解决的更多相关文章

  1. 数据库CPU 100%处理记录

    问题描述 2020年7月13日一大早收到告警,测试环境数据库CPU告警. 登录aws查看监控如下图   问题分析 出现这种cpu 100%的问题,都是因为sql性能问题导致的, 主要表现于 cpu 消 ...

  2. 解决new Thread().Start导致高并发CPU 100%的问题

    背景 之前接手一个项目的时候,发现到处是 new Thread(()=>{ //do something }).Start(); 这么做的目的,无非是为了减少页面等待时间提高用户体验,把一些浪费 ...

  3. xinetd cpu 100%

    今天,有个给客户试用的环境出现xinetd cpu 100%,而且连续运行很长时间了.之前也有环境发生过,今天排查解决了三四个问题,实在是查的身体都不舒服了,还没时间查这个问题... 知道的求解...

  4. [Java] CPU 100% 原因查找解决

    CPU 100%肯定是出现死锁,这个时候观察内存还是够用的,但是CPU一直100%,以下几步解决: 1. 找到进程消耗cpu最大的 $top top - :: up days, :, user, lo ...

  5. [转]不正当使用HashMap导致cpu 100%的问题追究

    以前项目中遇到类似业务,但使用的是CurrentHashMap,看到这篇文章,转载记录,警示自己. 以下内容转自: 转载自并发编程网 – ifeve.com(http://ifeve.com/hash ...

  6. 云计算之路-阿里云上:2014年6月11日17点遇到的CPU 100%状况

    今天下午17:00-17:05之间,在请求量没有明显变化的情况下,SLB中的1台云服务器的CPU突然串到100%(当时SLB中一共有3台云服务器),见下图: 造成的直接后果是请求执行时间变得超长,最长 ...

  7. Linux系统cpu 100%修复案例

    Linux系统cpu 100%修复案例 ​阿里云技术支持团队:完颜镇江 案例背景: Linux主机连续三天CPU% 处理思路: 1.  登录服务器查看/var/log/messages+/var/lo ...

  8. how to debug thread cpu 100%

    when we write a program, cpu and memory usages are very important to indicate the stability of the p ...

  9. SQL Server Cpu 100% 的常见原因及优化

    SQL Server Cpu 100% 的情况并不太常见,一般引起 SQL Server 产生性能问题的,都是 阻塞.连接数.IO 磁盘等.所以,一般SQL Server 的使用率都是比较低的.但是, ...

随机推荐

  1. 完全卸载TeamViewer与重新安装TeamViewer 7(含单文件版V12主控端)

    卸载teamviewer: 删除:%AppData%\Teamviewer.%tmp%\TeamViewer.C:\Users\Administrator\AppData\Local\TeamView ...

  2. POJ 2184 Cow Exhibition(背包)

    希望Total Smart和Totol Funess都尽量大,两者之间的关系是鱼和熊掌.这种矛盾和背包的容量和价值相似. dp[第i只牛][j = 当前TotS] = 最大的TotF. dp[i][j ...

  3. 【BZOJ1040】[ZJOI2008] 骑士(基环外向树DP)

    点此看题面 大致题意: 给你一片基环外向树森林,如果选定了一个点,就不能选择与其相邻的节点.求选中点的最大权值和. 树形\(DP\) 此题应该是 树形\(DP\) 的一个升级版:基环外向树\(DP\) ...

  4. WPF中批量进行验证操作

    //ref,out private void CheckTextboxNotEmpty(ref bool isOK, params TextBox[] textboxes) { foreach (Te ...

  5. windows下sorl安装

    1. JDK要求 Solr 4.10 要求JDK版本必须是1.7或更高. 2. 下载 下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 下 ...

  6. macbook pro开机键盘键盘和触摸板没反应问题

    今天遇到开机键盘和触摸板没反应的问题,打电话给售后,他叫我插一个usb外置键盘,开机时按shift+alt+control+电源键开机,突然发现可以了,这bug我也是醉了

  7. wepy框架构建小程序(1)

    wepy框架构建小程序(1) 基本操作: # 安装脚手架工具 npm install wepy-cli -g # 创建一个新的项目 npm init standard myproject # 进入新项 ...

  8. node的webserver模板

    const express = require('express'); const swig =require('swig'); const fs = require('fs'); //创建服务器 c ...

  9. P4747 D’s problem(d)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题 描述 题目描述 小D是一名魔法师,它最喜欢干的事就是对批判记者了. 这次记者招待会上,记者对 ...

  10. Qt中修改QtoolTip的样式

    Qt中的QtoolTip有几个需要注意的: 1.不能直在堆或栈中生成QToolTip对象.因为其构造函数为私有.2.从widget获取的tooltip不是tooltip对象,而是tooltip中的文本 ...