Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows

แก้ไขปัญหา Port Exhaustion ใน Windows 11/10

การเชื่อมต่อเครือข่ายระหว่างคอมพิวเตอร์ (โปรโตคอล 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 ใน 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 สูงสุด

แก้ไขปัญหา Port Exhaustion ใน Windows 11/10

วิธีที่ง่ายกว่าสำหรับการหาแอปพลิเคชันแบบนี้คือใช้ Task Manager แม้ PowerShell และ Command Prompt จะมีจุดเด่นของตัวเอง แต่หากคุณต้องการดูกระบวนการอย่างรวดเร็ว วิธีนี้ดีกว่า

  • เปิด Task Manager และไปที่แท็บ Details
  • คลิกขวาที่คอลัมน์ใดก็ได้ และคลิก “Select Columns.”
  • เพิ่ม “Handles” จากตัวเลือกที่มี
  • คลิกที่หัวคอลัมน์ Handles เพื่อจัดเรียงตามจำนวนสูงสุด

Microsoft แนะนำว่า หากการเชื่อมต่อล้มเหลว ให้ตรวจสอบว่าจำนวน handles สูงกว่า 3000 หรือไม่ หากใช่ แอปพลิเคชันนั้นคือผู้กระทำผิด อย่างไรก็ตาม บริการของ OS เป็นข้อยกเว้น สำหรับอื่นๆ ให้หยุดกระบวนการนั้นครั้งเดียว แล้วลองเข้าสู่ระบบด้วยข้อมูลประจำตัวโดเมนดูว่าสำเร็จหรือไม่

Process Explorer

แก้ไขปัญหา Port Exhaustion ใน Windows 11/10

คุณสามารถใช้ Process Explorer หาก Task manager ไม่ช่วย มันมีประโยชน์สำหรับการติดตามปัญหา DLL-version หรือ handle leaks และให้ข้อมูลเชิงลึกเกี่ยวกับแอปพลิเคชันที่เป็นอันตราย Process Explorer ควรดาวน์โหลดจากที่นี่และติดตั้ง ตรวจสอบให้แน่ใจว่ารันด้วยสิทธิ์ Admin

  1. คลิกขวาที่หัวคอลัมน์ และเลือก “Choose Columns.”
  2. ไปที่แท็บ Performance และเพิ่ม Handle Count.
  3. จากเมนู คลิก View > Show Lower Pane.
  4. อีกครั้ง คลิกเมนู เลือก View > Lower Pane View > Handles.
  5. จัดเรียง handles ในลำดับมากไปน้อย
  6. จะเปิดเผยกระบวนการที่มี handle counts สูงสุด
  7. คลิกไฮไลท์หนึ่งในกระบวนการที่มี handle count สูงสุด
  8. แผงด้านล่างจะแสดงประเภทสำหรับ 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

แก้ไขปัญหา Port Exhaustion ใน Windows 11/10