如何在IIS站点上查看活动用户会话数?
如何快速估计到Windows Server上运行的Web服务器上IIS站点的当前用户连接(会话)数?此类信息将有助于确定和预测服务器上的负载,选择最佳的网站维护和更新时间,并在用户数量增加时预测IIS服务器的负载。
确定IIS网站上活动用户会话数的最简单方法是使用Windows性能监视器中的性能计数器。
通过运行" perfmon"命令打开性能监视器控制台,然后转到"性能监视器"部分("监视工具">"性能监视器")。
然后,我们需要在监视器窗口中添加必要的计数器(默认情况下,将显示总CPU使用率计数器,但是我们可以将其删除)。要添加新计数器,请单击工具栏上的绿色按钮(我们可以在屏幕截图中看到它)或者按键盘上的Ctrl + N。
在可用计数器列表中,找到并展开" Web Service"组。在此类别中,我们对三个计数器感兴趣:
- "当前匿名用户"的匿名IIS用户数;
- "当前非匿名用户"的授权IIS用户数;
- IIS服务器上"当前连接"的活动连接总数。
选择所需的计数器,然后在"所选对象的实例"中选择要为其显示连接信息的一个或者多个IIS网站。有关服务器上所有网站的用户的信息存储在_Total
实例中。现在,我们只需要单击"添加>>"按钮即可将计数器移至要在右侧窗格中添加的计数器列表。
以相同的方式添加所有必需的计数器,然后单击"确定"。
现在,将在Performance Manager控制台中实时显示有关用户会话数的信息(默认情况下,计数器值显示为线性图)。如果在底部窗格中选择任何计数器,则可以查看给定时间段内的最后一个,平均值,最小值或者最大值。
我们可以将自定义性能计数器添加到此控制台,并将其保存在单独的视图中,以后可用于快速访问Web服务器负载数据。
我们可以从PowerShell访问IIS性能计数器。为此,可以使用Get-Counter cmdlet。所有可用的Web服务性能计数器的列表可以显示如下:
(Get-Counter -ListSet 'Web Service').counter
若要获取有关IIS服务器上当前活动连接数(计数器\ Web Service(*)\ Current Connections)的信息,请使用以下命令:
Get-Counter -Counter “\Web Service(*)\Current Connections”
如我们所见,此命令返回了与IIS服务器的连接总数以及每个站点的统计信息。
提示。
- 如果我们指定多个计数器的值,请用逗号分隔它们;否则,可以显示这些计数器的值。
- 使用"连续"选项,有关计数器值的信息会一直显示在控制台中,直到我们使用CTRL + C中断它为止。
我们可以获取特定IIS站点的活动会话数。例如,要获取名为Site1的站点上的当前连接数,请运行以下命令:
Get-Counter "web service(Site1)\current connections" -ComputerName web-srv01
我们可以指定在其上检查计数器值的服务器的名称。当我们在本地检查站点上的连接数时,不允许指定localhost:
为了不每次都指定服务器名称,可以使用环境变量COMPUTERNAME:
Get-Counter "web service(Site1)\current connections" -ComputerName $env:COMPUTERNAME
要获取整个IIS Web服务器(IIS上的总用户数)的当前连接的计数器的数值,可以使用以下命令:
((Get-Counter -Counter 'web service(_total)\current connections' -computer $env:COMPUTERNAME) | Select-Object -Expand countersamples).Cookedvalue
让我们尝试使用一个简单的脚本与我们的网站创建多个其他会话,并检查计数器值。我们可以使用Invoke-WebRequest cmdlet增加与IIS网站的连接数,也可以在浏览器中简单地打开几个窗口:
$counter = 20 for($i = 1; $i -le $counter; $i ++){$SiteAdress =" http:// localhost:9666 /"启动过程$SiteAdress}
检查当前连接计数器的值,并确保其增加。
如果服务器上正在运行多个IIS站点,并且我们需要以表格的形式获取到每个IIS站点的连接数,则可以使用此脚本(要将IIS中的数据接收到PowerShell中,需要加载WebAdministration模块):
import-module webadministration function get-CurrentConnection($Site) { Get-Counter "web service($Site)\current connections,web service($Site)\ BytesReceived/sec,web service($Site)\BytesSent/sec" -ComputerName $env:COMPUTERNAME } $IISsites = dir IIS:\Sites | Select Name $CurrentConnection = @() foreach ($site in $IISsites) { Write-Host $site $ConnCount = New-Object psobject | get-CurrentConnection -Site $site.name $CurrentConnection += $ConnCount } $CurrentConnection|out-gridview
我们还可以显示所有站点的连接计数器的数值(第一个值是与IIS的连接总数):
Get-wmiObject -class Win32_PerfRawData_W3SVC_WebService | select-object -expand currentconnections
我们可以使用来显示有关每个站点或者整个Web服务器的已接收/已发送数据量的信息。
Web service(sitename)\Bytes Received/sec
和
Web service(sitename)\Bytes Sent/sec
因此,我们研究了一种获取有关IIS Web服务器上运行的网站上负载的信息的方法。