การเชื่อมต่อเครือข่ายระหว่างคอมพิวเตอร์ (โปรโตคอล TCP หรือ UDP) ทำได้ผ่านพอร์ต (ports) 想像พวกมันเป็นจุดเข้า หรือประตูทางที่ถูกใช้โดยบริการหรือแอปพลิเคชัน เมื่อมีการเชื่อมต่อจากไคลเอนต์มากขึ้น พอร์ตจะขาดแคลนในจำนวน ในโพสต์นี้ เราจะแชร์วิธีแก้ไขปัญหา Port exhaustion
มีพอร์ตสองประเภท – Dynamic ports และ Defined ports Dynamic ports อนุญาตให้หลายไคลเอนต์เชื่อมต่อกับ defined ports เว็บไซต์เป็นตัวอย่างที่ดี พวกเขามักมีพอร์ต 80 ที่กำหนดไว้ แต่โดยใช้ active port พวกเขาสามารถให้บริการหลายไคลเอนต์ได้ เนื่องจากมีขีดจำกัดของ Dynamic port การเชื่อมต่อจะเริ่มล้มเหลวเมื่อพอร์ตทั้งหมดยุ่ง เรียกว่า port exhaustion
Port Exhaustion ใน Windows 11/10

จุดประสงค์หลักของคู่มือแก้ไขปัญหานี้คือระบุว่ากระบวนการหรือแอปพลิเคชันใดกำลังใช้พอร์ตจนหมด เมื่อคุณระบุได้แล้ว ขั้นตอนต่อไปคือแก้ไขแอปนั้น
อาการที่บ่งชี้ Port Exhaustion:
1] ไม่สามารถลงชื่อเข้าใช้เครื่องด้วยข้อมูลประจำตัวโดเมนได้ แต่เข้าสู่ระบบด้วยบัญชีท้องถิ่นได้ อาจเป็นไปได้ว่าบัญชีที่ใช้แล้วจะทำงานได้ แต่บัญชีใหม่จะล้มเหลว เกิดจากการแคช (caching)
2] การอัปเดต Group Policy จะเริ่มล้มเหลว ทุกครั้งที่พยายามเปลี่ยนแปลง คุณอาจได้ข้อผิดพลาดว่า “failed because of lack of network connectivity with domain controller” อาจเป็นชั่วคราวแต่เป็นสัญญาณ
3] File shares หรือ network drives เข้าถึงไม่ได้
4] Remote desktop ไปยังเซิร์ฟเวอร์ที่โฮสต์แอปพลิเคชัน ล้มเหลว
อาการอื่นๆ รวมถึง Event ID 4227, 4231 ใน Event viewer สำหรับ TCP พร้อมข้อความว่า dynamic port allocation ล้มเหลว คำสั่ง NetStat แสดงรายการจำนวนมากสำหรับสถานะ TIME_WAIT สำหรับแอปพลิเคชันเฉพาะ ฯลฯ
ใช้ NetStat สำหรับ Windows 11/10 และ Windows Server
เปิด Command Prompt ด้วยสิทธิ์ Admin
รันคำสั่ง:
netstat -anobq
จากนั้นตรวจสอบ Process ID ที่มีรายการ BOUND มากที่สุด
หากคุณใช้ PowerShell คุณสามารถใช้คำสั่งด้านล่างเพื่อระบุกระบวนการที่มี Bound มากที่สุด:
Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name="ProcessName";Expression={(Get-Process -PID ($_.Name.Split(',')[-1].Trim(' '))).Name}}, Group | Sort Count -Descendin
หลายครั้ง ไคลเอนต์ไม่ปิดพอร์ตอย่างถูกต้อง แม้ไม่ได้ใช้งาน พอร์ตเหล่านี้ก็ไม่ว่าง นี่เป็นหนึ่งในเหตุผลหลักของ port exhaustion
หากต้องการตรวจสอบบ่อย คุณสามารถใช้ Netstat command ใน loop ผลลัพธ์จะพร้อมใช้งานในไฟล์ข้อความที่สามารถใช้ตรวจสอบแนวโน้มได้ สคริปท์หน้าตาเป็นแบบนี้:
@ECHO ON set v=%1 :loop set /a v+=1 ECHO %date% %time% >> netstat.txt netstat -ano >> netstat.txt PING 1.1.1.1 -n 1 -w 60000 >NUL goto loop
ใช้ Task Manager หา Handles สูงสุด

วิธีที่ง่ายกว่าสำหรับการหาแอปพลิเคชันแบบนี้คือใช้ Task Manager แม้ PowerShell และ Command Prompt จะมีจุดเด่นของตัวเอง แต่หากคุณต้องการดูกระบวนการอย่างรวดเร็ว วิธีนี้ดีกว่า
- เปิด Task Manager และไปที่แท็บ Details
- คลิกขวาที่คอลัมน์ใดก็ได้ และคลิก “Select Columns.”
- เพิ่ม “Handles” จากตัวเลือกที่มี
- คลิกที่หัวคอลัมน์ Handles เพื่อจัดเรียงตามจำนวนสูงสุด
Microsoft แนะนำว่า หากการเชื่อมต่อล้มเหลว ให้ตรวจสอบว่าจำนวน handles สูงกว่า 3000 หรือไม่ หากใช่ แอปพลิเคชันนั้นคือผู้กระทำผิด อย่างไรก็ตาม บริการของ OS เป็นข้อยกเว้น สำหรับอื่นๆ ให้หยุดกระบวนการนั้นครั้งเดียว แล้วลองเข้าสู่ระบบด้วยข้อมูลประจำตัวโดเมนดูว่าสำเร็จหรือไม่
Process Explorer

คุณสามารถใช้ Process Explorer หาก Task manager ไม่ช่วย มันมีประโยชน์สำหรับการติดตามปัญหา DLL-version หรือ handle leaks และให้ข้อมูลเชิงลึกเกี่ยวกับแอปพลิเคชันที่เป็นอันตราย Process Explorer ควรดาวน์โหลดจากที่นี่และติดตั้ง ตรวจสอบให้แน่ใจว่ารันด้วยสิทธิ์ Admin
- คลิกขวาที่หัวคอลัมน์ และเลือก “Choose Columns.”
- ไปที่แท็บ Performance และเพิ่ม Handle Count.
- จากเมนู คลิก View > Show Lower Pane.
- อีกครั้ง คลิกเมนู เลือก View > Lower Pane View > Handles.
- จัดเรียง handles ในลำดับมากไปน้อย
- จะเปิดเผยกระบวนการที่มี handle counts สูงสุด
- คลิกไฮไลท์หนึ่งในกระบวนการที่มี handle count สูงสุด
- แผงด้านล่างจะแสดงประเภทสำหรับ handles ทั้งหมด พอร์ตหรือ sockets มักมีป้าย “File \Device\AFD”
ปิดกระบวนการที่มีจำนวน handles สูง หากแอปพลิเคชัน spawn กลับมา อาจเป็นสาเหตุ และคุณจะต้องแก้ไขแอปพลิเคชันหรือขอให้นักพัฒนา/OEM แก้ไข หากคุณไม่สามารถแก้ไขได้เพราะแอปพลิเคชันต้องการ คุณควรพิจารณาเพิ่มจำนวนพอร์ตที่คอมพิวเตอร์สามารถใช้ได้ คำสั่งด้านล่าง (ตัวอย่าง) สามารถเปลี่ยนช่วงและเพิ่มได้
netsh int ipv4 set dynamicport tcp start=10000 num=1000
พอร์ตเริ่มต้นขั้นต่ำที่ตั้งได้คือ 1025 พอร์ตสิ้นสุดสูงสุดไม่ควรเกิน 65535
ด้วย ذلك วิธีแก้ไขยังเป็นชั่วคราว ในฐานะ IT admin คุณจะต้องหาวิธีแก้ไขที่ดีกว่าเพื่อ troubleshoot port exhaustion บางครั้ง อาจใช้หลายเซิร์ฟเวอร์เพื่อเพิ่มพอร์ต แต่ 그건 또 다른 리그 altogether
