บทนำ
วิธีเร็วในการประเมินจำนวน User Connections (Sessions) ปัจจุบันไปยัง IIS Sites บน Web Server ที่รันบน Windows Server ข้อมูลนี้ช่วยกำหนดและคาดการณ์ Load บน Server เลือกเวลาที่เหมาะสมสำหรับ Maintenance และ Updates ของ Website คาดการณ์ IIS Server Load เมื่อจำนวน User เพิ่มขึ้น
การใช้ Performance Monitor
วิธีง่ายที่สุดคือใช้ Performance Counters ใน Windows Performance Monitor
- เปิด Performance Monitor Console ด้วยคำสั่ง perfmon ไปที่ Section Performance Monitor (Monitoring Tools → Performance Monitor)
- เพิ่ม Counters ที่ต้องการ (Default แสดง Total CPU Usage Counter เท่านั้น สามารถลบได้) คลิกปุ่มสีเขียวบน Toolbar (หรือ Ctrl+N)
- ในรายการ Available Counters หาและ Expand Group Web Service สนใจ 3 Counters:
- Current Anonymous Users – จำนวน Anonymous IIS Users
- Current Non-Anonymous Users – จำนวน Authorized IIS Users
- Current Connections – จำนวน Active Connections ทั้งหมดบน IIS Server
- เลือก Counter ที่ต้องการ ใน Instances of selected objects เลือก IIS Website(s) ที่ต้องการแสดงข้อมูล Connection ข้อมูล Users ของทั้งหมด Sites อยู่ใน Instance _Total คลิก Add >> ย้าย Counter ไป Right Pane
- เพิ่ม Counters อื่นๆ ทั้งหมด แล้ว OK
ตอนนี้ข้อมูลจำนวน User Sessions ใน Performance Monitor Console แสดง Real-time (Default แสดงเป็น Linear Graphs) คลิก Counter ใดใน Bottom Pane จะดู Last, Average, Minimum, Maximum Value สำหรับช่วงเวลาที่กำหนดได้
สามารถเพิ่ม Custom Performance Counters และ Save เป็น View แยก เพื่อเข้าถึง Web Server Load Data ได้เร็วในอนาคต
เข้าถึง IIS Performance Counters จาก PowerShell
ใช้ Get-Counter Cmdlet แสดงรายการ Web Service Performance Counters ทั้งหมด:
(Get-Counter -ListSet 'Web Service').counter
ดูจำนวน Active Connections ปัจจุบันบน IIS Server (Counter \Web Service(*)\Current Connections):
Get-Counter -Counter “\Web Service(*)\Current Connections”
คำสั่งคืนค่า Total Connections และ Statistics สำหรับแต่ละ Site
Tip:
- แสดงค่า Counters หลายตัวพร้อมกันได้ โดยระบุคั่นด้วย Comma
- ใช้ Option –Continuous เพื่อแสดงค่า Counter ตลอดเวลาใน Console จนกว่าจะ Interrupt ด้วย CTRL+C
ดู Active Sessions สำหรับ IIS Site เฉพาะเจาะจง ตัวอย่าง Site ชื่อ Site1:
Get-Counter "web service(Site1)\current connections" -ComputerName web-srv01
ระบุ Server Name ที่ตรวจสอบ Counter ตรวจสอบ Local ไม่ได้ระบุ localhost:
Get-Counter "web service(Site1)\current connections" -ComputerName $env:COMPUTERNAME
ดูค่าตัวเลข Counter "current connections" ของทั้ง IIS Web Server (Total Users):
((Get-Counter -Counter 'web service(_total)\current connections' -computer $env:COMPUTERNAME) | Select-Object -Expand countersamples).Cookedvalue
Script ตัวอย่างสำหรับทดสอบและแสดงผลแบบตาราง
สร้าง Additional Sessions กับ Site และตรวจสอบ Counter เพิ่มขึ้นด้วย Invoke-WebRequest หรือเปิด Browser หลายหน้าต่าง:
$counter = 20
for($i=1;$i -le $counter;$i++){
$SiteAdress = "https://localhost:9666/"
Start-Process $SiteAdress
}
ถ้ามีหลาย IIS Sites บน Server ต้องการจำนวน Connections แต่ละ Site แบบ Table ใช้ Script นี้ (ต้อง Import WebAdministration Module):
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
แสดงค่าตัวเลข Connection Counters สำหรับ All Sites (ค่าแรกคือ Total Connections):
Get-wmiObject -class Win32_PerfRawData_W3SVC_WebService | select-object -expand currentconnections
แสดงข้อมูล Received/Sent Data สำหรับแต่ละ Site หรือทั้ง Web Server ด้วย Counters Web service(sitename)\Bytes Received/sec และ Web service(sitename)\Bytes Sent/sec
สรุป
เราได้ศึกษาวิธีดึงข้อมูล Load บน Sites ที่รันบน IIS Web Server ทั้งผ่าน Performance Monitor GUI และ PowerShell