Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Windows

Khắc phục sự cố cạn kiệt cổng (Port Exhaustion) trên Windows 11/10

Mọi kết nối mạng giữa các máy tính (giao thức TCP hoặc UDP) đều được thực hiện thông qua các cổng. Hãy tưởng tượng chúng như các điểm nhập hoặc cổng giao mà dịch vụ hoặc ứng dụng sử dụng. Khi nhiều kết nối client được thiết lập hơn, số lượng cổng động bị thiếu. Trong bài viết này, chúng tôi sẽ chia sẻ cách khắc phục sự cố Port exhaustion (cạn kiệt cổng).

Có hai loại cổng – Dynamic ports (cổng động) và Defined ports (cổng xác định). Cổng động cho phép nhiều client kết nối với các cổng xác định. Trang web là ví dụ tốt. Chúng thường có cổng 80 được xác định, nhưng sử dụng cổng hoạt động, chúng có thể phục vụ nhiều client. Vì có giới hạn cổng động, các kết nối sẽ bắt đầu thất bại khi tất cả các cổng đều bận. Điều này được gọi là cạn kiệt cổng.

Port Exhaustion trên Windows 11/10

Khắc phục sự cố cạn kiệt cổng (Port Exhaustion) trên Windows 11/10

Mục đích chính của hướng dẫn khắc phục sự cố này là xác định quy trình hoặc ứng dụng nào đang cạn kiệt cổng. Khi đã xác định, bước tiếp theo là sửa chữa ứng dụng đó.

Triệu chứng nhận diện Port Exhaustion:

1] Không thể đăng nhập vào máy với thông tin xác thực miền, tuy nhiên đăng nhập bằng tài khoản cục bộ hoạt động. Có thể tài khoản đã dùng có thể hoạt động, nhưng tài khoản mới sẽ thất bại. Điều này xảy ra do bộ nhớ đệm.

2] Cập nhật Group Policy sẽ bắt đầu thất bại. Mỗi khi bạn cố gắng thay đổi, bạn có thể nhận được lỗi "failed because of lack of network connectivity with domain controller". Có thể là tạm thời nhưng là dấu hiệu.

3] Chia sẻ tệp hoặc ổ đĩa mạng trở nên không thể truy cập.

4] Remote desktop đến máy chủ nơi ứng dụng được lưu trữ thất bại.

Các dấu hiệu khác bao gồm event ID 4227, 4231 trong Event Viewer cho TCP với thông báo cấp phát cổng động thất bại. Lệnh NetStat hiển thị số lượng lớn mục cho trạng thái TIME_WAIT cho một ứng dụng cụ thể, v.v.

Sử dụng NetStat cho Windows 11/10 và Windows Server

Mở Command Prompt với đặc quyền nâng cao.

Chạy lệnh:

netstat -anobq

Tiếp theo, kiểm tra Process ID có số mục BOUND nhiều nhất.

Nếu bạn dùng PowerShell, có thể dùng lệnh dưới để xác định tiến trình có Bound nhiều nhất.

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

Nhiều lần, client không đóng cổng đúng cách. Ngay cả khi không sử dụng, các cổng này không được giải phóng. Đây là một trong những lý do lớn nhất gây cạn kiệt cổng.

Nếu nhu cầu thường xuyên, bạn có thể dùng lệnh Netstat trong vòng lặp. Đầu ra có thể có sẵn trong tệp văn bản để theo dõi xu hướng. Dưới đây là kịch bản:

@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

Sử dụng Task Manager để tìm Handles tối đa

Khắc phục sự cố cạn kiệt cổng (Port Exhaustion) trên Windows 11/10

Một phương pháp hơi tự nhiên hơn để tìm ứng dụng như vậy là dùng Task Manager. Mặc dù PowerShell và Command Prompt có ưu điểm riêng, nếu bạn muốn xem tiến trình nhanh chóng, đây là phương pháp tốt hơn.

  • Mở Task Manager, chuyển sang tab Details.
  • Nhấp chuột phải vào bất kỳ cột nào, chọn "Select Columns."
  • Thêm "Handles" từ các tùy chọn có sẵn.
  • Nhấp vào tiêu đề cột Handles để sắp xếp theo số lượng tối đa.

Microsoft khuyến nghị nếu các kết nối thất bại, hãy kiểm tra xem số lượng handles có cao hơn 3000 không. Nếu có, ứng dụng đó là thủ phạm. Tuy nhiên, dịch vụ hệ điều hành là ngoại lệ. Đối với các ứng dụng khác, hãy dừng tiến trình đó một lần, sau đó thử đăng nhập bằng thông tin xác thực miền và xem có thành công không.

Process Explorer

Khắc phục sự cố cạn kiệt cổng (Port Exhaustion) trên Windows 11/10

Bạn có thể dùng Process Explorer nếu Task Manager không giúp ích. Nó hữu ích để tìm vấn đề phiên bản DLL hoặc rò rỉ handle và cung cấp thông tin chi tiết về ứng dụng độc hại. Process Explorer nên được tải từ đây và cài đặt. Đảm bảo chạy với đặc quyền nâng cao.

  1. Nhấp chuột phải vào tiêu đề cột, chọn "Choose Columns."
  2. Chuyển sang tab Performance, thêm Handle Count.
  3. Từ menu, nhấp vào View > Show Lower Pane.
  4. Lại nhấp vào menu, chọn View > Lower Pane View > Handles.
  5. Sắp xếp handles theo thứ tự giảm dần.
  6. Sẽ tiết lộ tiến trình có số lượng handle cao nhất.
  7. Nhấp để highlight một trong các tiến trình có handle count cao nhất.
  8. Khung dưới sẽ tiết lộ loại cho tất cả handles. Cổng hoặc socket thường có nhãn "File \Device\AFD".

Đóng tiến trình có số lượng handle cao. Nếu ứng dụng tự khởi động lại, đó có thể là nguyên nhân, và bạn sẽ phải sửa chữa ứng dụng hoặc yêu cầu nhà phát triển/OEM sửa chữa. Nếu bạn không thể sửa chữa vì ứng dụng yêu cầu, bạn nên cân nhắc tăng số cổng máy tính có thể dùng. Lệnh dưới đây (ví dụ) có thể thay đổi phạm vi và tăng lên.

netsh int ipv4 set dynamicport tcp start=10000 num=1000

Cổng bắt đầu tối thiểu có thể đặt là 1025. Cổng kết thúc tối đa không thể vượt quá 65535.

Đó là giải pháp tạm thời. Là admin CNTT, bạn sẽ phải tìm giải pháp tốt hơn để khắc phục cạn kiệt cổng. Đôi khi có thể dùng nhiều server để tăng cổng, nhưng đó là cấp độ khác hoàn toàn.

Khắc phục sự cố cạn kiệt cổng (Port Exhaustion) trên Windows 11/10