诊断
在诊断 App Pool 导致问题方面,您可以:
- 选择服务器
- 转到 IIS > 工作进程
这应该会弹出一个这样的菜单,以便您可以确定哪个 App Pool 正在运行异常。
从那里您可以简单地重新启动应用程序池,10 次中有 9 次将解决您遇到的任何直接问题。
治疗
除非您经营某种有争议的业务,否则这可能不是 DDOS 攻击。某些代码可能只是挂起,因为它无法通过另一台服务器或陷入循环或错误分配的资源,或者您的应用程序池有一段时间没有被回收。
您可以通过编程方式处理此问题,而无需手动识别、登录和回收应用程序池。只需在您的应用程序池上配置CPU 属性。您可以在达到 CPU 阈值一段时间后让它终止(并自动重新启动)您的进程。
在您的情况下,如果您希望它以 80% 的速度重新启动,您可以右键单击应用程序池并转到高级设置并应用以下配置:
注意:正如kraken101 所指出的,随着时间的推移,不同的 IIS GUI 对此的处理方式有所不同。虽然配置值始终为 1/1000 %,但有时 GUI 会占用整个百分比。
您可以将其添加到您的配置部分,如下所示:
<applicationPools>
<add name="DefaultAppPool">
<cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" />
</add>
</applicationPools>
或者,您可以使用 Powershell 的WebAdministration 模块编写脚本,如下所示:
(*确保启用了 web-scripting-tools)
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
预防
上述步骤将有助于修复一些问题,但不会真正解决您遇到的任何潜在问题。
以下是一些有关进行性能监控的资源: