我在 IIS 6 上运行了一些 ASP.NET Web 应用程序。今天 IIS 的 CPU 使用率非常高,通常甚至不会出现这种情况。我该如何解决此问题?
编辑:我按照建议使用应用程序池将这个问题缩小到 1 个 Web 应用程序,我已经运行了 procmon 和 proc explorer,并且正在查看我能用它们解决什么问题。这是一个相当稳定的 CPU 使用率。
我不能说我们拥有最新的补丁,不幸的是我无法控制这一点,但我确实拥有管理权限。
答案1
再次...我最喜欢的方法...下载 sysinternals 并使用 procmon、filemon/regmon 查看是否有东西受到攻击。使用进程资源管理器查看打开文件句柄列表中是否有异常文件打开。
IIS 日志中是否显示任何内容?
如果是处理特定文件或脚本的话,您可能会从进程资源管理器的打开文件句柄函数中获得提示。
发生这种情况时,IIS 正在提供什么样的内容?
当然...是否应用了最新更新/服务包?
答案2
如果您具有服务器的管理员和远程桌面访问权限,则可以使用将 w3wp.exe 进程与其所属的 IIS 6 应用程序池匹配的脚本(见下例)。因此,如果您发现某个应用程序池占用了过多的 RAM 或处理器,则可以查看该池中正在运行的应用程序,并开始缩小范围。我们一次又一次地执行了类似的故障排除,最终选择了单个有问题的应用程序池,并将其中的 3 个应用程序分离到各自的应用程序池中,因为它们一起导致了内存问题。通过上述操作和开发人员优化代码,问题得到了解决。如果您的网站正在进行数据库调用,您可能还需要查看 2 个服务器之间的连接,以确保您没有遇到导致 CPU 峰值的超时。
我编写了一个示例 HTA,它将按照我的指定枚举应用程序池。您可以在此处找到该 HTA: http://www.scriptinganswers.com/forum2/forum_posts.asp?TID=3222
答案3
您是否在自己的应用程序池中运行多个网站?
答案4
我使用 debugdiag,它是 M$ 的免费下载。您可以让它等待挂起或按需运行。然后您可以使用其工具分析转储,或者使用 winDBG。
http://blogs.msdn.com/tess/是一个关于诊断生产问题的很棒的博客。