Làm thế nào để nhanh chóng ước lượng số lượng kết nối người dùng (phiên) hiện tại đến các trang web IIS trên web server chạy Windows Server? Thông tin như vậy sẽ cho phép xác định và dự đoán tải trên máy chủ, chọn thời điểm tốt nhất cho bảo trì và cập nhật trang web, dự đoán tải máy chủ IIS khi số lượng người dùng tăng.
Cách dễ nhất để xác định số phiên người dùng hoạt động trên trang web IIS là sử dụng bộ đếm hiệu năng trong Windows Performance Monitor.
Mở console Performance Monitor bằng lệnh perfmon và chuyển đến phần Performance monitor (Monitoring Tools — > Performance Monitor).
Sau đó bạn cần thêm các bộ đếm cần thiết vào cửa sổ monitor (mặc định chỉ hiển thị bộ đếm tổng CPU, nhưng bạn có thể xóa nó). Để thêm bộ đếm mới, nhấp nút màu xanh trên thanh công cụ (bạn thấy nó trên ảnh chụp màn hình) hoặc nhấn Ctrl+N trên bàn phím.

Trong danh sách bộ đếm có sẵn, tìm và mở rộng nhóm Web Service. Trong danh mục này, chúng ta quan tâm đến ba bộ đếm:
- Current Anonymous Users – số người dùng ẩn danh IIS;
- Current Non-Anonymous Users – số người dùng đã xác thực IIS;
- Current Connections – tổng số kết nối hoạt động trên máy chủ IIS.
Chọn bộ đếm mong muốn và trong Instances of selected objects chọn một hoặc nhiều trang web IIS mà bạn muốn hiển thị thông tin kết nối. Thông tin về người dùng của tất cả trang web trên máy chủ được lưu trong instance _Total . Bây giờ bạn chỉ cần nhấp nút Add >> để chuyển bộ đếm sang danh sách bộ đếm sẽ được thêm ở bảng bên phải.

Thêm tất cả bộ đếm cần thiết theo cách tương tự và nhấp OK.

Bây giờ thông tin về số phiên người dùng trong console Performance Manager được hiển thị theo thời gian thực (mặc định, giá trị bộ đếm được hiển thị dưới dạng đồ thị tuyến tính). Nếu bạn chọn bất kỳ bộ đếm nào trong bảng dưới cùng, bạn có thể xem giá trị cuối cùng, trung bình, tối thiểu hoặc tối đa của nó trong một khoảng thời gian nhất định.
Bạn có thể thêm bộ đếm hiệu năng tùy chỉnh vào console này và lưu chúng trong một view riêng biệt, để sau này truy cập nhanh dữ liệu tải web server.
Bạn có thể truy cập bộ đếm hiệu năng IIS từ PowerShell. Để làm điều này, bạn có thể dùng cmdlet Get-Counter. Danh sách tất cả bộ đếm hiệu năng Web Service có sẵn có thể hiển thị như sau:
(Get-Counter -ListSet 'Web Service').counter

Để lấy thông tin về số kết nối hoạt động hiện tại trên máy chủ IIS (bộ đếm \Web Service(*)\Current Connections), dùng lệnh này:
Get-Counter -Counter “\Web Service(*)\Current Connections”
Như bạn thấy, lệnh này trả về cả tổng số kết nối đến máy chủ IIS và thống kê cho từng site.
Mẹo.
- Giá trị của nhiều bộ đếm có thể hiển thị nếu bạn chỉ định chúng cách nhau bằng dấu phẩy;
- Với tùy chọn –Continuous, thông tin về giá trị bộ đếm liên tục hiển thị trong console cho đến khi bạn ngắt bằng CTRL+C.
Bạn có thể lấy số phiên hoạt động cho một trang web IIS cụ thể. Ví dụ, để lấy số kết nối hiện tại trên site tên Site1, chạy lệnh sau:
Get-Counter "web service(Site1)\current connections" -ComputerName web-srv01
Bạn có thể chỉ định tên máy chủ mà giá trị bộ đếm được kiểm tra. Khi kiểm tra số kết nối trên site cục bộ, chỉ định localhost không được phép:

Để không phải chỉ định tên máy chủ mỗi lần, bạn có thể dùng biến môi trường COMPUTERNAME:
Get-Counter "web service(Site1)\current connections" -ComputerName $env:COMPUTERNAME
Để lấy giá trị số của bộ đếm “current connections” của toàn bộ máy chủ web IIS (tổng người dùng trên IIS), bạn có thể dùng lệnh này:
((Get-Counter -Counter 'web service(_total)\current connections' -computer $env:COMPUTERNAME) | Select-Object -Expand countersamples).Cookedvalue
Hãy thử dùng script đơn giản để tạo thêm vài phiên với site của chúng ta và kiểm tra giá trị bộ đếm. Bạn có thể tăng số kết nối đến trang web IIS bằng cmdlet Invoke-WebRequest, hoặc đơn giản mở vài cửa sổ trình duyệt:
$counter = 20
for($i=1;$i -le $counter;$i++){
$SiteAdress = "https://localhost:9666/"
Start-Process $SiteAdress
}
Kiểm tra giá trị bộ đếm current connections và đảm bảo nó tăng lên.
Nếu nhiều trang web IIS chạy trên máy chủ, và bạn cần lấy số kết nối đến từng trang ở dạng bảng, bạn có thể dùng script này (để nhận dữ liệu từ IIS vào PowerShell, bạn cần load module 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

Bạn cũng có thể hiển thị giá trị số của bộ đếm kết nối cho tất cả site (giá trị đầu tiên là tổng số kết nối đến IIS):
Get-wmiObject -class Win32_PerfRawData_W3SVC_WebService | select-object -expand currentconnections
Bạn có thể hiển thị thông tin về lượng dữ liệu nhận/gửi cho từng site hoặc toàn bộ web server bằng bộ đếm Web service(sitename)\Bytes Received/sec và Web service(sitename)\Bytes Sent/sec.
Vậy, chúng ta đã xem cách lấy thông tin về tải trên các site chạy trên máy chủ web IIS.