我有一台 Web 服务器,上面运行着多个 ASP.NET 站点。我时常注意到 IIS 会将服务器的 CPU 推到 100%。这些站点根据它们运行的 .NET 版本共享应用程序池。
我正在寻找一种方法,能够使用某种工具来精确定位是哪个网站出现了这个问题。如果该工具恰好能够深入到代码中来显示它,那就太好了。如果没有,我很高兴知道是哪个网站导致了这个问题。
我已经尝试使用 ANTS。但是,使用 ANTS 时,您需要知道它是哪个网站,然后让它运行并等待 CPU 崩溃的 Web 应用程序。不是非常理想。
有什么经验/想法吗?
答案1
有些人认为一个好的做法是为每个网站/应用程序创建一个应用程序池,这样当您需要重新启动一个网站时,它就不会影响其他网站。同样,它将为每个网站创建一个新的 IIS 工作进程 w3p.exe,通过这样做,我相信您可以更轻松地监控我的每个网站是否正在达到 CPU 峰值。
然后,要详细查看 CPU 使用情况,例如,你可以使用 Miscrosft Sysinternal 中的 Process Explorerhttp://technet.microsoft.com/en-us/sysinternals/bb896653.aspx这是一个很棒的免费工具,您可以用它收集您正在查看的信息。
希望我的提示能够帮助解决 IIS 问题。
答案2
我在这里回答了完全相同的问题:IIS6 CPU 峰值
以下是我的回答内容:
有多少个应用程序池?您可以先将网站移到单独的应用程序池中,然后使用任务管理器 + 命令行 iisapp 来匹配哪个应用程序池与哪个任务匹配。这将帮助您确定要从哪个网站开始。
一旦确定了这一点,就可以获取微软 IIS 调试工具:http://www.microsoft.com/download/en/details.aspx?id=26798
然后:
使用 IIS 调试诊断来排除 II6 中工作进程 CPU 使用率故障
IIS7 中的失败请求跟踪功能可以帮助追踪网站的许多性能问题,但我们在 IIS6 上仍有广泛的客户群。在 Microsoft 发布了一套可以更深入地分析堆栈跟踪的工具之前,解决 IIS6 中的性能问题一直非常困难。
IIS 调试诊断工具可以帮助跟踪工作进程中的 CPU 和内存问题。Microsoft 有一篇很好的知识库文章,其中也介绍了基础知识:http://support.microsoft.com/kb/919791。
在系统本地安装 IIS 调试诊断。
在开始 > 程序 > IIS 诊断 > 调试诊断工具 > 调试诊断工具下打开调试诊断工具。
单击“工具”>“选项和设置”>“性能日志”选项卡。选择“启用性能计数器数据记录”选项。单击“确定”。
使用任务管理器找到工作进程的PID。
选择“进程”选项卡并在列表中找到该进程。
右键单击该进程并选择“创建完整用户转储”。这将需要几分钟,然后会弹出一个框,提供转储文件的路径。
选择高级分析选项卡并单击添加数据文件按钮。浏览到创建的转储文件并单击确定。
从可用分析脚本框中选择崩溃/挂起分析器,用于 CPU 性能和崩溃分析。单击开始分析。
几分钟后,应生成一份报告,其中包含堆栈跟踪信息以及有关执行时间超过 90 秒的任何请求的信息。请注意,内存转储将使用几百兆字节的空间,因此请确保将该工具安装在具有足够调试空间的驱动器上。此外,如果机器负载很重,您可以在系统上创建用户转储,将文件复制到工作站,然后在本地执行分析。
答案3
有一个非常简单的方法,至少在 IIS8 中是这样的,不知道 IIS6 中是否存在。无论如何,我认为这很有帮助。
- 你去 IIS
- 在左侧选择您的服务器
- 点击图标工作进程
- 查看每个应用程序的 CPU/内存