ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ตรวจสอบ CPU, RAM และดิสก์บน Windows Server

ตรวจสอบ CPU, RAM และดิสก์บน Windows Server

เมื่อ Windows Server ตอบสนองช้า Remote Desktop หน่วง หรือเว็บบน IIS โหลดนาน สาเหตุส่วนใหญ่มาจากทรัพยากรตัวใดตัวหนึ่งเต็ม ได้แก่ CPU, RAM, ดิสก์ (ทั้งพื้นที่และความเร็วอ่านเขียน) หรือเครือข่าย การรู้ว่าตัวไหนเป็นคอขวดและโปรเซสใดเป็นต้นเหตุ ช่วยให้แก้ได้ตรงจุดแทนการรีสตาร์ทเครื่องไปเรื่อยๆ

บทความนี้แนะนำเครื่องมือที่มีอยู่แล้วใน Windows Server 2019 และ 2022 ตั้งแต่ดูภาพรวมอย่างเร็วไปจนถึงเก็บข้อมูลย้อนหลัง พร้อมคำสั่ง PowerShell ที่ใช้ได้บน Server Core ซึ่งไม่มีหน้าจอกราฟิก

สิ่งที่ต้องเตรียม

  • เข้าเครื่องผ่าน Remote Desktop ด้วยบัญชีในกลุ่ม Administrators (บัญชีทั่วไปจะเห็นเฉพาะโปรเซสของตัวเอง)
  • PowerShell 5.1 ที่มากับระบบ
  • ถ้าเครื่องช้ามากจนเปิดหน้าจอไม่ได้ ให้เข้าผ่าน Console ตามบทความ การ Remote เข้า Console Server ผ่าน Web UI

ขั้นตอนที่ 1: ดูภาพรวมด้วย Task Manager

กด Ctrl + Shift + Esc (ใช้ได้ทั้งในเครื่องและใน Remote Desktop) หรือคลิกขวาที่ Taskbar แล้วเลือก Task Manager ถ้าเห็นหน้าต่างเล็กให้กด More details

  • แท็บ Processes: คลิกหัวคอลัมน์ CPU, Memory หรือ Disk เพื่อเรียงจากมากไปน้อย จะเห็นทันทีว่าโปรแกรมใดใช้ทรัพยากรสูง
  • แท็บ Performance: กราฟ CPU, Memory, Disk และ Ethernet แยกตัว ดูค่า Utilization และ Up time ได้ที่นี่
  • แท็บ Details: แสดงชื่อไฟล์จริงของโปรเซสและ PID คลิกขวาที่หัวคอลัมน์ แล้วเลือก Select columns เพื่อเพิ่มคอลัมน์ Command line ช่วยแยกว่า w3wp.exe แต่ละตัวเป็นของ Application Pool ใด
  • แท็บ Users: ดูว่าผู้ใช้ Remote Desktop แต่ละคนใช้ทรัพยากรเท่าไร

ขั้นตอนที่ 2: เจาะลึกด้วย Resource Monitor

กด Win + R พิมพ์ resmon แล้ว Enter หรือกด Open Resource Monitor ที่ด้านล่างของแท็บ Performance ใน Task Manager

  • แท็บ Disk: ส่วน Disk Activity บอกว่าไฟล์ใดถูกอ่านเขียนมากที่สุด ส่วน Storage แสดง Active Time และ Disk Queue Length ถ้า Active Time อยู่ที่ 100% ต่อเนื่อง แปลว่าดิสก์เป็นคอขวด
  • แท็บ Memory: แถบสีด้านล่างแยก In Use, Modified, Standby และ Free ค่า Hard Faults/sec สูงต่อเนื่องหมายถึงระบบต้องอ่านข้อมูลจาก Page File บ่อย RAM ไม่พอ
  • แท็บ Network: ดูโปรเซสที่รับส่งข้อมูลมาก และส่วน TCP Connections บอก IP ปลายทางที่เชื่อมต่ออยู่
  • แท็บ CPU: ติ๊กโปรเซสที่สงสัย แล้วดูส่วน Services และ Associated Handles เพื่อรู้ว่าโปรเซสนั้นเปิดไฟล์ใดอยู่

ขั้นตอนที่ 3: ตรวจด้วย PowerShell

คำสั่งต่อไปนี้ใช้ได้ทั้งเครื่องที่มีหน้าจอและ Server Core เปิด PowerShell แบบ Run as Administrator

ดูการใช้ CPU รวม 5 ครั้ง ห่างกันครั้งละ 2 วินาที

Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 2 -MaxSamples 5

ค่าที่ได้เป็นเปอร์เซ็นต์ของทุก Core รวมกัน ถ้าอยู่เหนือ 85-90 ตลอดแปลว่า CPU ไม่พอ

10 โปรเซสที่ใช้ RAM มากที่สุด (หน่วย MB)

Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, Id, @{n='RAM_MB';e={[math]::Round($_.WorkingSet64/1MB)}}

10 โปรเซสที่ใช้เวลา CPU สะสมมากที่สุดตั้งแต่เริ่มทำงาน

Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU

คอลัมน์ CPU ของคำสั่งนี้เป็นวินาทีสะสม ไม่ใช่เปอร์เซ็นต์ปัจจุบัน ถ้าต้องการค่าปัจจุบันรายโปรเซส ใช้

Get-Counter '\Process(*)\% Processor Time' | Select-Object -ExpandProperty CounterSamples | Where-Object {$_.InstanceName -notin '_total','idle'} | Sort-Object CookedValue -Descending | Select-Object -First 10 InstanceName, CookedValue

ค่า CookedValue นับเต็ม 100 ต่อหนึ่ง Core เครื่อง 4 Core จึงมีค่าสูงสุดได้ถึง 400

ดู RAM ทั้งหมดและที่เหลือ (หน่วย GB)

Get-CimInstance Win32_OperatingSystem | Select-Object @{n='Total_GB';e={[math]::Round($_.TotalVisibleMemorySize/1MB,1)}}, @{n='Free_GB';e={[math]::Round($_.FreePhysicalMemory/1MB,1)}}

ดูพื้นที่ดิสก์ทุกไดรฟ์

Get-Volume | Where-Object DriveLetter | Select-Object DriveLetter, FileSystemLabel, @{n='Size_GB';e={[math]::Round($_.Size/1GB,1)}}, @{n='Free_GB';e={[math]::Round($_.SizeRemaining/1GB,1)}}

หาโฟลเดอร์ที่กินพื้นที่มากที่สุดในระดับแรกของไดรฟ์ C: (อาจใช้เวลาหลายนาทีบนดิสก์ใหญ่)

Get-ChildItem C:\ -Directory -Force -ErrorAction SilentlyContinue | ForEach-Object { $s = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; [pscustomobject]@{Folder=$_.FullName; GB=[math]::Round($s/1GB,2)} } | Sort-Object GB -Descending

ขั้นตอนที่ 4: เก็บข้อมูลย้อนหลังด้วย Performance Monitor

ปัญหาที่เกิดตอนกลางคืนหรือเป็นช่วงๆ ดูสดไม่ทัน ต้องเก็บข้อมูลไว้ก่อน

  1. กด Win + R พิมพ์ perfmon
  2. ไปที่ Data Collector Sets > User Defined คลิกขวา New > Data Collector Set
  3. ตั้งชื่อ เช่น Baseline เลือก Create manually (Advanced) แล้วติ๊ก Performance counter
  4. กด Add แล้วเพิ่ม Counter เหล่านี้: Processor(_Total)\% Processor Time, Memory\Available MBytes, Memory\Pages/sec, LogicalDisk(_Total)\% Free Space, PhysicalDisk(_Total)\Avg. Disk sec/Transfer
  5. ตั้ง Sample interval เป็น 15 วินาที แล้วกด Finish
  6. คลิกขวาที่ Collector Set ที่สร้าง เลือก Start เมื่อต้องการดูผล ไปที่ Reports > User Defined

อย่าลืมกด Stop เมื่อเก็บพอแล้ว เพราะไฟล์ผลลัพธ์จะโตขึ้นเรื่อยๆ ในโฟลเดอร์ C:\PerfLogs

ตรวจสอบผลลัพธ์

เทียบค่าที่วัดได้กับเกณฑ์คร่าวๆ ด้านล่าง ซึ่งใช้เป็นจุดเริ่มต้นได้กับเซิร์ฟเวอร์ทั่วไป

ตัวชี้วัดปกติควรตรวจสอบ
% Processor Timeต่ำกว่า 70% โดยเฉลี่ยสูงกว่า 85% ต่อเนื่องหลายนาที
Memory\Available MBytesเหลือมากกว่า 10% ของ RAMต่ำกว่า 500 MB
Avg. Disk sec/Transferต่ำกว่า 0.010 (10 ms)สูงกว่า 0.025 (25 ms) ต่อเนื่อง
พื้นที่ว่างไดรฟ์ C:มากกว่า 20%ต่ำกว่า 10% หรือไม่ถึง 10 GB

เมื่อรู้ตัวต้นเหตุแล้ว ให้แก้ที่โปรแกรมนั้น แล้ววัดซ้ำด้วยคำสั่งเดิม ค่าต้องลดลงอย่างชัดเจน

ปัญหาที่พบบ่อย

TiWorker.exe หรือ Windows Modules Installer ใช้ CPU สูง

เกิดขณะ Windows Update ติดตั้งหรือเตรียมอัปเดต มักหายไปเองเมื่อเสร็จ ไม่ควรฆ่าโปรเซสนี้กลางคัน ถ้าเกิดบ่อยในเวลาทำงาน ให้กำหนดช่วงเวลาอัปเดตตามบทความ อัปเดต Windows Server ผ่าน Windows Update และ sconfig

MsMpEng.exe (Antimalware Service Executable) ใช้ CPU และดิสก์สูง

Microsoft Defender กำลังสแกน ถ้าเป็นโฟลเดอร์ฐานข้อมูลหรือ Log ที่เขียนตลอดเวลา สามารถเพิ่ม Exclusion เฉพาะโฟลเดอร์นั้นได้ แต่ทำเท่าที่จำเป็น เพราะโฟลเดอร์ที่ยกเว้นจะไม่ถูกตรวจมัลแวร์

sqlservr.exe ใช้ RAM เกือบหมด

เป็นพฤติกรรมปกติของ SQL Server ที่จองหน่วยความจำไว้เป็น Cache ให้กำหนด Maximum server memory ใน SQL Server Management Studio (คลิกขวาที่ Server > Properties > Memory) เหลือไว้ให้ระบบปฏิบัติการอย่างน้อย 2-4 GB

ไดรฟ์ C: เต็มเพราะโฟลเดอร์ WinSxS

ห้ามลบไฟล์ใน C:\Windows\WinSxS ด้วยมือ ให้สั่งล้าง Component ที่ไม่ใช้แล้วด้วยคำสั่ง

Dism /Online /Cleanup-Image /StartComponentCleanup

นอกจากนี้ให้ตรวจโฟลเดอร์ Log ของ IIS (C:\inetpub\logs\LogFiles) ซึ่งโตขึ้นทุกวันถ้าไม่ได้ตั้งลบ หากลบแล้วพื้นที่ยังไม่พอ ควรขยายดิสก์ตามบทความ การขยายพื้นที่ Partition หลังเพิ่มพื้นที่ Disk Space (Windows Server)

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ขั้นตอนที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ทีมงานตรวจสอบได้เร็วขึ้น

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security