如何在IIS站点上查看活动用户会话数?

时间:2020-01-09 10:46:35  来源:igfitidea点击:

如何快速估计到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服务器上运行的网站上负载的信息的方法。