我在一台 Web 服务器 (IIS6) 上遇到了问题,其中 aspnet_wp 占用了 100% 的 CPU。这台服务器上有多个网站。但我如何知道哪个网站导致了问题?这些网站采用 2.0 框架,服务器运行在 IIS5 隔离模式下。
答案1
对于 IIS6:在命令行中运行cscript c:\windows\system32\iisapp.vbs
。它将转储每个应用程序池的 PID,以便您可以跟踪哪一个被固定。
W3WP.exe PID: 12216 AppPoolId: A
W3WP.exe PID: 1632 AppPoolId: B
W3WP.exe PID: 8892 AppPoolId: C
对于 IIS7:appcmd apppool /?
答案2
我使用了 SysInternals Process Explorer(现在可从微软网站) 查看服务器上正在运行的所有进程。您可以进入选项以查看某些列并打开命令行,这将向您显示运行网站的应用程序池的名称。
我们为每个网站设置了单独的应用程序池,这样如果一个网站崩溃,就不会影响所有网站。您可以将每个网站隔离在各自的应用程序池中,然后使用该工具找出导致问题的确切原因
答案3
由于您使用的是 IIS5 隔离模式,因此很难判断哪个站点正在使用 CPU。您无法使用任务管理器将其对齐。
iisstate 和 Debug Diag 是两个可能对您有帮助的工具。如果您可以退出 IIS5 隔离模式,您将获得每个应用程序池的新工作进程 (w3wp.exe),从而更容易跟踪它。(在 IIS7 中,这又变得容易得多)