如何在iis中因工作进程而100%防止CPU使用率

时间:2013-02-21 00:12:48

标签: asp.net iis-7.5 windows-server-2008-r2 cpu-usage worker-process

我的CPU使用率在Windows Server 2008-R2中大部分时间都是100%,使用我自己的vps,vmware,四核和4GB Ram。当我打开Windows任务管理器并转到资源监视器时,我发现100%的使用是因为workerprocess.exe。我的IIS中有3个网站。

  • 如何确定导致该用途的网站
  • 如何将其限制为80%的CPU使用率?
  • 这可能是DDOS攻击吗?
  • 有没有办法防止DDOS?

我在我的vps上安装了eset-nod32,但它没有在日志中显示任何攻击。我已经尝试搜索IIS并阻止DDOS,并且刚刚找到了禁止IP地址的扩展,但我怎样才能找到生成流量的IP地址?

该网站使用ASP.NETC#撰写。如何确定该网站上发生的情况以及导致该cpu使用的代码行?

此外,我的一个网站应该访问管理员的桌面并读取和写入一些文件。因此,我改变了它的应用程序池 - >身份(过程模型)到本地系统,我不知道它是否与CPU使用有关。

8 个答案:

答案 0 :(得分:86)

诊断

在诊断App Pool导致问题的方面,您可以:

  1. 选择服务器
  2. 转到IIS>工人流程
  3. Server Settings

    这会显示一个这样的菜单,这样您就可以确定哪个App Pool正在运行。

    Worker Processes

    从那里你可以简单地重新启动应用程序池,并且10次中有9次可以解决你遇到的任何直接问题。

    治疗

    除非您经营某种有争议的业务,否则这可能不是DDOS攻击。有些代码可能只是悬挂,因为它无法通过另一台服务器或陷入循环或错误分配资源,或者您的应用程序池暂时没有被回收。

    您可以通过编程方式处理此问题,而无需手动识别,登录和回收应用池。只需在应用池上配置CPU property即可。只要达到CPU阈值一段时间,您就可以杀死(并自动重启)您的进程。

    在您的情况下,如果您希望以80%重新启动,则可以右键单击应用程序池并转到“高级设置”并应用以下配置:

    App Pool Advanced Settings

    注意:正如kraken101指出的那样,不同的IIS GUI会随着时间的推移对此进行不同的处理。虽然配置值始终为1/1000%,但有时GUI占整个百分比。

    您可以将此添加到your config部分,如下所示:

    <applicationPools>
       <add name="DefaultAppPool">
         <cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" />
       </add>
    </applicationPools>
    

    或者,您可以使用Powershell的WebAdministration Module编写脚本,如下所示:
    (* make sure web-scripting-tools is enabled)功能

    Import-Module WebAdministration
    
    $appPoolName = "DefaultAppPool"
    $appPool = Get-Item "IIS:\AppPools\$appPoolName"
    $appPool.cpu.limit = 80000
    $appPool.cpu.action = "KillW3wp"
    $appPool.cpu.resetInterval = "00:01:00"
    $appPool | Set-Item
    

    防止

    上述步骤将有助于修复一些事情,但不会真正解决您遇到的任何潜在问题。

    以下是有关执行绩效监控的一些资源:

答案 1 :(得分:14)

嗯,这需要很长时间才能搞清楚。几点可以缩小范围:

答案 2 :(得分:1)

使用PerfMon收集数据和使用DebugDiag进行分析。

在搜索类似问题时找到此链接。

http://www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool

答案 3 :(得分:1)

我最近遇到了同样的问题,找到了一个对我有用的解决方案,并在很大程度上降低了内存消耗水平。

<强>解决方案:

首先找到导致大量内存使用的应用程序。

您可以在任务管理器的“详细信息”部分找到它。

下一步。

  1. 打开 IIS管理器
  2. 点击应用程序池。您将找到系统正在使用的许多应用程序池。
  3. 现在,从任务管理器中,您发现哪个应用程序导致大量内存消耗。有多种选择,您需要选择具有&#39; 1&#39;在您的Web应用程序的“应用程序”列中。
  4. 当您点击右侧的应用程序池时,您会在编辑应用程序池下看到高级设置选项。转到高级设置。 5.现在,在常规类别下,将启用32位应用程序设置为 True
  5. 重新启动IIS服务器,或者您可以在任务管理器的性能部分看到消耗量下降。
  6. 如果此解决方案适合您,请添加评论以便我知道。

答案 4 :(得分:0)

如果不必要,请从您网站的相应应用程序池中关闭“启用32位应用程序”。

这在我的本地计算机上为我工作

答案 5 :(得分:0)

看到w3wp.exe的CPU使用率很高有很多原因。 我选择了六个常见原因来解决。

  1. ASP.NET Web应用程序内的错误率很高
  2. Web流量增加导致CPU高
  3. 与应用程序相关的问题
  4. 垃圾收集
  5. 请求被阻塞或挂在ASP.NET管道中的某处
  6. 需要优化的效率低下的.NET代码

答案 6 :(得分:-2)

使用procmon定义您的问题。

答案 7 :(得分:-4)

我最近自己遇到了这个问题,一旦我确定哪个AppPool导致了问题,解决问题的唯一方法是完全删除该应用程序池并为该站点创建一个新的应用程序池。

相关问题