asp.net 如何防止CPU使用率100%,因为在iis中的工作进程

cfh9epnr  于 2022-12-27  发布在  .NET
关注(0)|答案(8)|浏览(351)

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

  • 我如何确定哪个网站导致了这种使用
  • 如何将CPU使用率限制在80%?
  • 会不会是DDOS攻击?
  • 有什么方法可以防止DDOS吗?

我在vps上安装了eset-nod32,但是日志中没有显示任何攻击。我试着搜索IIS和防止DDOS,刚刚找到了一个班宁IP地址的扩展,但是我怎么才能找到产生流量的IP地址呢?
该网站是用ASP.NETC#编写的。如何确定该网站上发生了什么以及哪些代码行导致了CPU占用?
另外,我的一个网站需要访问管理员的桌面并读写一些文件,因此我将它的应用程序池-〉标识(进程模型)改为本地系统,我不知道这是否与CPU使用率有关。

3bygqnnd

3bygqnnd1#

诊断
在诊断哪些应用池导致了问题方面,您可以:
1.选择服务器
1.转到IIS〉工作进程

这应该会弹出一个这样的菜单,这样你就可以确定哪个应用程序池正在疯狂运行。

从那里,你可以简单地重新启动应用程序池和9倍的10,将修复任何即时问题,你有。

治疗

除非你经营着某种有争议的业务,否则这可能不是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

预防

上面的步骤将有助于修复一些东西,一旦他们已经打破,但不会真正解决任何潜在的问题,你有。
以下是一些有关执行性能监视的资源:

vd2z7a6w

vd2z7a6w2#

好吧,这要花很长时间才能弄明白。有几点可以缩小范围:

at0kjp5o

at0kjp5o3#

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

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

5n0oy7gb4#

使用PerfMon收集数据,使用DebugDiag进行分析。
搜索类似问题时找到此链接。
http://www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool

mwkjh3gx

mwkjh3gx5#

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

    • 解决方案:**

首先找到导致大量内存使用的应用程序。
您可以在任务管理器的"详细信息"部分找到此信息。
下一个。
1.打开IIS管理器
1.单击应用程序池。您将找到系统正在使用的许多应用程序池。
1.现在,从任务管理器中,您已经找到了导致大量内存消耗的应用程序。该应用程序有多个选项,您需要选择Web应用程序的应用程序列中包含"1"的应用程序。
1.单击右侧的应用程序池时,您将在"编辑应用程序池"下看到一个选项高级设置。转到"高级设置"。5.现在,在"常规"类别下,将"**启用32位应用程序"**设置为"True
1.重新启动IIS服务器,或者您可以在任务管理器的性能部分看到消耗下降。
如果这个解决方案对你有效,请添加评论,这样我就可以知道了。

htzpubme

htzpubme6#

如果没有必要,请从网站的相应应用程序池中关闭“启用32位应用程序”。
这在我的本地计算机上对我有效

mw3dktmi

mw3dktmi7#

使用procmon定义您的问题。

ppcbkaq5

ppcbkaq58#

我自己最近也遇到了这个问题,一旦我确定是哪个应用池导致了这个问题,解决这个问题的唯一方法就是完全删除那个应用池,然后创建一个新的应用池供网站使用。

相关问题