Hello! 欢迎来到小浪云!


查看 IIS 中每个网站的资源使用情况



在 IIS 服务器上,特别是运行虚拟主机环境时,很多管理员都会遇到 CPU 占用 100% 或系统资源异常的情况,但往往不知道是哪个网站导致了问题。以下方法可以帮助我们快速定位每个站点的资源使用情况(主要是内存和 CPU 占用)。

 

步骤一:将每个网站设置为独立进程

1.打开 IIS 管理器

选择具体的站点,右键点击 “属性”。

切换到 “主目录” 选项卡,将 “应用程序保护” 改为 “高(独立)”。

这样会为每个站点启动一个独立的 dllhost.exe 进程。

 

2.查看独立进程的资源占用

打开 任务理器,切换到 “进程” 选项卡。

你会看到多个 dllhost.exe 进程,每个进程对应一个独立的站点。

此时可以看到这些进程的 CPU 占用 和 内存使用量。

 

步骤二:找到每个站点对应的进程(dllhost.exe)

接下来,我们需要确认每个 dllhost.exe 进程对应的是哪个网站。

 

1.打开组件服务管理器

在 运行 中输入 dcomcnfg,按回车打开 组件服务。

依次展开:组件服务 → 计算机 → 我的电脑 → COM+ 应用程序。

 

2.查看站点与进程的关联

在 COM+ 应用程序 下,你会看到类似于 IIS-{domain.com//Root} 这样的条目。

每个条目代表一个 IIS 网站,名称中包含对应的域名或站点路径。

点击顶部工具栏中的 “状态查看”,你会看到如下信息:

名称 运行状态 PID

IIS-{example.com//Root}  1688

PID 就是对应的 dllhost.exe 进程 ID,可以在任务管理器中找到。

 

3.确认资源占用

打开任务管理器 → “详细信息” 选项卡。

找到对应的 dllhost.exe,对比进程 ID(PID),即可查看该网站的 CPU 占用 和 内存使用量。

这样就能快速定位是哪个网站导致了资源占用异常。

 

步骤三:通过 PowerShell 脚本快速定位

如果服务器站点较多,手动排查效率低,可以通过 PowerShell 脚本实现快速定位。

# 加载 IIS 模块

Import-Module WebAdministration

 

# 获取所有运行的 w3wp.exe 进程和对应的资源占用

$Processes = Get-Process w3wp –ErrorAction SilentlyContinue

$AppPools = Get-WebAppPoolState | Where-Object { $_.Value -eq “Started” }

 

# 遍历应用程序池,输出内存和 CPU 占用

foreach ($AppPool in $AppPools) {

    $AppPoolName = $AppPool.ItemXPath.Split(“/”)[-1]

    $PID = (Get-WmiObject Win32_Process | Where-Object { $_.Name -eq “w3wp.exe” -and $_.CommandLine -match $AppPoolName }).ProcessId

    if ($PID) {

        $Process = $Processes | Where-Object { $_.Id -eq $PID }

        Write-Output “App Pool: $AppPoolName | PID: $PID | Memory: $($Process.WorkingSet / 1MB) MB | CPU: $($Process.CPU)”

    }

}

脚本功能:

列出每个 IIS 应用程序池的进程 ID、内存使用量和 CPU 使用率。

适用于需要快速定位资源占用高的站点。

 

步骤四:结合 Perfmon 进行深入分析

1.打开 性能监视器(Perfmon):

在 运行 中输入 perfmon.msc 并回车。

 

2.添加 w3wp 或 dllhost 进程的监控:

在左侧面板中,选择 “性能监视器”,然后点击 “添加计数器”。

添加 Process → Working Set(内存占用) 和 % Processor Time(CPU 占用)。

选中对应的进程,查看资源占用情况。

相关阅读