我的CPU使用率在Windows Server 2008-R2中大部分时间都是100%,使用我自己的vps,vmware,四核和4GB Ram。当我打开Windows任务管理器并转到资源监视器时,我发现100%的使用是因为workerprocess.exe
。我的IIS中有3个网站。
我在我的vps上安装了eset-nod32,但它没有在日志中显示任何攻击。我已经尝试搜索IIS并阻止DDOS,并且刚刚找到了禁止IP地址的扩展,但我怎样才能找到生成流量的IP地址?
该网站使用ASP.NET
和C#
撰写。如何确定该网站上发生的情况以及导致该cpu使用的代码行?
此外,我的一个网站应该访问管理员的桌面并读取和写入一些文件。因此,我改变了它的应用程序池 - >身份(过程模型)到本地系统,我不知道它是否与CPU使用有关。
答案 0 :(得分:86)
在诊断App Pool导致问题的方面,您可以:
这会显示一个这样的菜单,这样您就可以确定哪个App Pool正在运行。
从那里你可以简单地重新启动应用程序池,并且10次中有9次可以解决你遇到的任何直接问题。
除非您经营某种有争议的业务,否则这可能不是DDOS攻击。有些代码可能只是悬挂,因为它无法通过另一台服务器或陷入循环或错误分配资源,或者您的应用程序池暂时没有被回收。
您可以通过编程方式处理此问题,而无需手动识别,登录和回收应用池。只需在应用池上配置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 :(得分:14)
嗯,这需要很长时间才能搞清楚。几点可以缩小范围:
答案 2 :(得分:1)
使用PerfMon收集数据和使用DebugDiag进行分析。
在搜索类似问题时找到此链接。
答案 3 :(得分:1)
我最近遇到了同样的问题,找到了一个对我有用的解决方案,并在很大程度上降低了内存消耗水平。
<强>解决方案:强>
首先找到导致大量内存使用的应用程序。
您可以在任务管理器的“详细信息”部分找到它。
下一步。
如果此解决方案适合您,请添加评论以便我知道。
答案 4 :(得分:0)
如果不必要,请从您网站的相应应用程序池中关闭“启用32位应用程序”。
这在我的本地计算机上为我工作
答案 5 :(得分:0)
看到w3wp.exe的CPU使用率很高有很多原因。 我选择了六个常见原因来解决。
答案 6 :(得分:-2)
使用procmon定义您的问题。
答案 7 :(得分:-4)
我最近自己遇到了这个问题,一旦我确定哪个AppPool导致了问题,解决问题的唯一方法是完全删除该应用程序池并为该站点创建一个新的应用程序池。