来自StackOverflow的X-Post:
https://stackoverflow.com/questions/9465123/intermittent-high-cpu-100-on-production-webserver
我们有一个带有3个Web服务器的Web集群,每个Web服务器有24个内核和24GB内存。
我们的应用程序是最新的补丁ASP.NET 4.0,与MVC3,在IIS 7.5 – 在它自己的应用程序池。
非常间歇地(可能每2/3天一次)其中一个networking服务器将停止服务请求,并且所有24个内核将显示100%的CPU(内存和磁盘看起来正常)。
在IISpipe理器没有完全冻结的情况下,有效的运行请求似乎没有提供任何有用的信息,在很多站点区域/请求中都是非常随机的。
一旦服务器死了,我们可以把它卸载 – 在5分钟的不再服务的请求之后,CPU的活动将回落到正常状态 – 这使我们认为这不是一个无限循环。
工作进程的内存转储(大小约为4GB)似乎没有显示任何位于任何托pipe堆栈跟踪中的任何代码/名称空间 – 但只是.net开始请求的东西(这是可能的我使用WinDbg错了 – 并没有正确加载我们的符号 – 但堆栈跟踪不显示任何缺less/未命名的方法调用 – 所以我很困惑)
我们的服务器通常很快乐地处理1000请求/秒,所以这非常奇怪。
我们在Perfmon中注意到的一件奇怪的事情是竞争率达到800.我们的应用程序中没有任何花哨的multithreading代码,我们唯一的locking在我们的caching代码中年龄改变)。
任何意见/提示如何进一步诊断这个问题将不胜感激。
干杯。
戴夫,有几个想法来启动你:
我假设这是w3wp.exe正在吃你的资源。 如果没有,可能值得运行一些PAL报告,以便更好地了解服务器的整体健康状况: http : //pal.codeplex.com/有时我甚至会运行PAL,即使它是IIS问题。 PAL可以发现你永远不会想到的各种问题。
检查性能监视器(在您的秒杀之前和期间)…尝试找出你的ASP.Net应用程序请求/秒在“慢速响应”期间更高…我发现这是最快的方式告诉你如果你正在处理比正常更多的请求。
试着弄清楚是否有一个(或几个)页面加载时间较长。 确保正在loggingIIS统计信息,然后查找所花费的时间。 Checkout Log Analyer( http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1864 )。
哦,不要忘了StackExchange迷你探查器http://code.google.com/p/mvc-mini-profiler/一旦你找出什么URL导致的问题。
此外,不要忽略任何.NET错误捕捉你有:-)
让我们知道你所看到的。 -克里斯
使用DebugDiag 1.2来执行转储的分析:
https://www.microsoft.com/download/en/details.aspx?id=26798
请注意,任何能够使用多个线程的进程都可以将服务器的所有处理器的利用率提高到100%,这一点很有用。 这包括本机代码甚至是核心os组件。
当你说“最新的补丁”,对我来说这意味着与Windows Update,这并没有得到很多更严重的Windows 2008 R2错误修正。
特别是,如果应用程序正在访问远程共享上的任何文件,则应用文件系统修补程序将是个不错的主意:
Windows Server 2008和Windows Server 2008 R2中文件服务技术的当前可用修补程序列表
http://support.microsoft.com/kb/2473205
检查它是否被HashDos攻击定位 – 并设置请求限制。