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

问题描述 投票:47回答:7

我使用自己的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.NETC#编写的。如何确定该网站上发生的情况以及哪些代码行导致该cpu使用?

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

asp.net iis-7.5 windows-server-2008-r2 cpu-usage worker-process
7个回答
14
投票

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


86
投票

诊断

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

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

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

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

治疗

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

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

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

注意:正如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
投票

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

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

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


1
投票

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

解:

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

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

下一个。

  1. 打开IIS管理器。
  2. 单击“应用程序池”。您将找到系统正在使用的许多应用程序池。
  3. 现在,从任务管理器中,您发现哪个应用程序导致大量内存消耗。有多种选择,您需要在Web应用程序的“应用程序”列中选择“1”的选项。
  4. 单击右侧的应用程序池时,您将在“编辑应用程序池”下看到“高级设置”选项。转到高级设置。 5.现在,在“常规”类别下,将“启用32位应用程序”设置为“真”
  5. 重新启动IIS服务器,或者您可以看到任务管理器的性能部分中的消耗量下降。

如果此解决方案适合您,请添加评论,以便我知道。


0
投票

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

这对我在我的本地机器上工作


0
投票

有很多原因可以让你看到w3wp.exe的高CPU使用率。我选择了六个常见的原因来掩盖。

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

-2
投票

使用procmon定义您的问题。


-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.