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

Sil*_*ght 54 asp.net worker-process cpu-usage iis-7.5 windows-server-2008-r2

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

  • 我怎样才能找出导致该用途的网站
  • 如何将其限制为80%的CPU使用率?
  • 它可能是DDOS攻击吗?
  • 有没有办法防止DDOS?

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

该网站是用ASP.NET和写的C#.如何确定该网站上发生的情况以及哪些代码行导致该cpu使用?

此外,我的一个网站应该访问管理员的桌面并读取和写入一些文件.因此,我将其应用程序池 - >身份(进程模型)更改为本地系统,我不知道它是否与CPU使用率相关.

Kyl*_*Mit 91

诊断

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

  1. 选择服务器
  2. 转到IIS>工作进程

服务器设置

这应该会显示一个这样的菜单,以便您可以确定哪个App Pool正在运行.

工人流程

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

治疗

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

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

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

应用池高级设置

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

您可以将此添加到您的配置部分,如下所示:

<applicationPools>
   <add name="DefaultAppPool">
     <cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" />
   </add>
</applicationPools>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Powershell的Web管理模块编写脚本,如下所示:
(*确保启用了Web脚本工具)

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
Run Code Online (Sandbox Code Playgroud)

预防

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

以下是有关执行性能监视的一些资源:


Tom*_*cek 14

好吧,这可能需要很长时间才能搞清楚.几点要缩小范围:

  • 在我的情况下,IIS试图连接到Microsoft服务器以更新Dot.NET并再次编译网站.因为服务器在内部网并且无法访问互联网,所以它一直在失败并重新开始.如您所见,它与代码或AppPool无关.无论如何,一个sysinternal工具找到为什么downvotes,是一个好主意! (4认同)