Как быстро оценить текущее количество подключений пользователей к сайтам на веб сервере IIS, работающем на Windows Server? Подобная информация позволит точнее оценить и спрогнозировать нагрузку на сервер, выбрать оптимальное время для проведения обслуживания и обновления сайта, спрогнозировать нагрузку на сервер при увеличении количества пользователей.
Проще всего определить количество активных сессией пользователей на веб сайте IIS при помощи счетчиков производительности в мониторе производительности Windows (Performance Monitor).
Откройте консоль Performance Monitor, выполнив команду perfmon и перейдите в консоль монитора производительности (Monitoring Tools —> Performance Monitor).
Далее нужно добавить в окно монитора необходимые нам счетчики (по умолчанию в окне отображается счетчик общей загрузки CPU — его можно удалить). Чтобы добавить новый счетчик, нажмите зеленую кнопку в панели инструментов (на скриншоте она выделена) или нажмите комбинацию клавиш Ctrl+N.
В списке доступных категорий счетчиков найдем и развернем группу Web Service. В этой категории нас интересуют три счетчика:
- Current Anonymous Users – количество анонимных пользователей IIS;
- Current Non-Anonymous Users – количество авторизованных (неанонимных) пользователей IIS;
- Current Connections – общее число активных подключений на сервере IIS.
Выберем нужный счетчик и в поле экземпляров счетчика (Instances of selected objects) выберем один или несколько сайтов IIS, для которых нужно отобразить информацию о подключениях. Информация по пользователям всех сайтов на сервере содержится в экземпляре _Total. Осталось нажать кнопку Add >>, чтобы нужный счетчик переместился в список добавляемых счетчиков в правом окне.
Точно так же добавим все необходимые счетчики и нажмем ОК.
Теперь в консоли Performance Monitor в режиме реального времени будет отображаться информация о количестве активных подключений (сессий) пользователей на веб сервере/сайте IIS (по умолчанию значения счетчиков выводятся в виде линейных графиков). Выбрав в нижней панели любой из счетчиков можно посмотреть его текущее (last), среднее (average), минимальное (minimum) и максимальное (maximum) значение за данный период времени.
В текущую консоль можно добавить собственные счетчики производительности и сохранить их в отдельном представлении, которое в дальнейшем можно использовать для быстрого доступа к информации о нагрузке на веб-сервер.
Доступ к данным счетчиков производительности для сайтов IIS можно получить и из PowerShell. Для этого достаточно использовать командлет получения данных из счетчика производительности Get-Counter.
Список всех доступных счетчиков производительности для службы Web Service можно вывести так:
(Get-Counter -ListSet 'Web Service').counter
Чтобы получить информацию о текущем количестве активных подключений на сервере IIS (счетчик \Web Service(*)\Current Connections) воспользуйтесь такой командой:
Get-Counter -Counter “\Web Service(*)\Current Connections”
Как вы видите, данная команда вернула как суммарное количество подключений к серверу IIS, так и статистику для каждого из сайтов.
- Значения нескольких счетчиков можно вывести, указав их через запятую;
- С ключем –Continuous информация о значении счетчика будет выводится в консоль постоянно, пока не будет выполнено прерывание командой CTRL+C.
Как мы уже говорили, можно получить количество активных сессии для конкретного сайта IIS. Например, чтобы получить текущее количество соединений на сайте с именем Site1, выполните команду (вы можете указать имя сервера, на котором проверяется значение счетчика, при проверке количества подключений на сайте локально, указывать localhost недопустимо):
Get-Counter "web service(Site1)\current connections" -ComputerName web-app01
Чтобы не указывать каждый раз имя сервера, можно использовать переменную окружения COMPUTERNAME
Get-Counter "web service(Site1)\current connections" -ComputerName $env:COMPUTERNAME
Для получения числового значения счетчика «current connections» всего веб-сервера IIS (суммарная нагрузка на IIS) можно использовать такой код:
((Get-Counter -Counter 'web service(_total)\current connections' -computer $env:COMPUTERNAME) | Select-Object -Expand countersamples).Cookedvalue
Попробуем с помощью простого скрипта создать несколько дополнительных сессии с нашим сайтом и проверить значение счетчика. Можно накрутить количество обращений к IIS с помощью с помощью командлета Invoke-WebRequest, а можно просто открыть несколько окон (отдельных процессов) в браузере:
$counter = 20
for($i=1;$i -le $counter;$i++){
$SiteAdress = "http://localhost:9666/"
Start-Process $SiteAdress
}
После этого проверьте значение счетчика current connections и убедитесь, что он увеличиться.
Если на сервере запушено несколько сайтов IIS, и нужно получить количество подключений к каждому из них в табличном виде, можно воспользоваться таким скриптом (для получения данных из IIS в PowerShell нужно загрузить модуль WebAdministration):
import-module webadministration
function get-CurrentConnection($Site) {
Get-Counter "web service($Site)\current connections,web service($Site)\ Bytes Received/sec,web service($Site)\Bytes Sent/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 service(sitename)\ Bytes Received/sec и web service(sitename)\Bytes Sent/sec».
Итак, мы рассмотрели методику, позволяющую получить информацию о нагрузке на сайты, запущенные на веб сервере IIS.