https://stackoverflow.com/questions/9465123/intermittent-high-cpu-100-on-production-webserver
我们有一个包含3个Web服务器的Web集群,每个Web服务器有24个核心和1个. 24GB内存
我们的应用程序是最新修补的ASP.NET 4.0,带有MVC3,在IIS 7.5上 – 在它自己的应用程序池中.
非常间歇性地(可能每2/3天一次)其中一个网络服务器将停止提供请求,并且所有24个核心将显示100%cpu(内存和磁盘看起来正常).
IIS管理器未完全冻结的次数很少,主动运行请求似乎没有提供任何有用的信息,而是在大量站点区域/请求中随机分布.
一旦服务器死了,我们就可以把它从负载中解放出来 – 在5分钟的不再服务请求之后,cpu活动将回落到正常状态 – 让我们认为它不是无限循环.
工作进程的内存转储(大约4GB大小!)似乎没有在任何托管堆栈跟踪中的任何地方显示任何代码/命名空间 – 但只是.Net开始请求的东西(我可能正在使用WinDbg错误 – 并没有正确加载我们的符号 – 但堆栈跟踪没有显示任何丢失/未命名的方法调用 – 所以我很困惑)
我们的服务器通常非常愉快地处理1000 req / sec,所以这一切都很奇怪.
我们在Perfmon中注意到的一个奇怪的事情 – 争用率/秒变为800.我们的应用程序中没有任何花哨的多线程代码,我们唯一的锁定在我们的缓存代码中(其中没有改变了年龄).
任何有关如何进一步诊断此问题的建议/提示都将非常感激.
干杯.
解决方法
一些想法开始你:
我假设它是w3wp.exe正在吃你的资源.如果没有,可能值得运行一些PAL报告以更好地了解服务器的整体运行状况:http://pal.codeplex.com/有时我甚至会运行PAL,即使它是一个IIS问题… PAL可以发现各种各样的问题你永远不会想到.
检查性能监视器(在峰值之前和期间)…尝试在“慢响应”期间确定您的ASP.Net应用程序请求/秒是否更高…我发现这是告诉您的最快方式如果您处理的请求多于正常情况.
尝试确定是否有一个(或几个)页面需要更长时间才能加载.确保记录IIS统计信息,然后查看所花费的时间.结帐日志分析器(http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1864).
哦,一旦你找出导致问题的URL,就不要忘记StackExchange mini profiler http://code.google.com/p/mvc-mini-profiler/.
此外,不要忽视任何.NET错误捕获你到位:-)
让我们知道你看到了什么.-克里斯