Cách khắc phục lỗi “Port Already In Use” trên Linux và Windows nhanh chóng và hiệu quả

Tóm tắt nội dung chính

 

  • Lỗi “Port Already In Use” là gì: Xảy ra khi một ứng dụng cố gắng sử dụng một cổng mạng đã bị tiến trình khác chiếm giữ, dẫn đến xung đột và không thể khởi động.

 

  • Nguyên nhân phổ biến: Tiến trình cũ chưa đóng hoàn toàn, nhiều dịch vụ cùng sử dụng một cổng, hoặc cổng đang ở trạng thái TIME_WAIT của TCP.

 

  • Cách xử lý trên Linux: Dùng các công cụ mạnh như lsof, netstat, và fuser để tìm và kết thúc tiến trình chiếm cổng.

 

  • Cách xử lý trên Windows: Có thể dùng Task Manager để tìm tiến trình hoặc thao tác bằng Command Prompt với các lệnh tương tự như trên Linux.

 

Lỗi “Port Already In Use” là gì?

 

Đây là thông báo cho biết một cổng mạng mà bạn muốn sử dụng đã được một chương trình khác đăng ký. Khi đó, ứng dụng của bạn sẽ không thể chạy trên cổng này do xung đột kết nối.

 

Port, Port Already In, Linux

 

Nguyên nhân thường gặp

 

Một số nguyên nhân phổ biến dẫn đến lỗi “Port Already In Use” gồm:

 

  • Tiến trình cũ chưa tắt hoàn toàn: Khi ứng dụng bị treo hoặc đóng không đúng cách, tiến trình vẫn tiếp tục chạy ngầm và giữ port.

 

  • Xung đột cấu hình: Hai dịch vụ (ví dụ Apache và Nginx) cùng được thiết lập lắng nghe trên một cổng như 80 hoặc 443.

 

  • Trạng thái TIME_WAIT của TCP: Sau khi một kết nối TCP kết thúc, hệ thống sẽ giữ port trong trạng thái TIME_WAIT một thời gian ngắn để đảm bảo dữ liệu được truyền đầy đủ trước khi giải phóng hoàn toàn.

 

Cách xử lý lỗi “Port Already In Use” trên Linux

 

Để khắc phục, việc đầu tiên là xác định tiến trình đang chiếm giữ cổng. Dưới đây là ba công cụ dòng lệnh mạnh mẽ giúp bạn thực hiện việc này.

 

1. Dùng lệnh lsof

 

lsof (viết tắt của list open files) là công cụ phổ biến để kiểm tra các file hoặc socket đang mở.

 

Cú pháp:

 

sudo lsof -i :<PORT_NUMBER>
 

Thay <PORT_NUMBER> bằng số cổng bạn cần kiểm tra.

 

Ví dụ:


 
sudo lsof -i :8080
 

Kết quả trả về sẽ bao gồm:

 

  • COMMAND: Tên chương trình đang dùng cổng

 

  • PID: Mã tiến trình

 

  • USER: Người dùng đang chạy tiến trình

 

Để dừng tiến trình chiếm cổng 8080:


 
sudo kill $(lsof -t -i:8080)
 

2. Dùng lệnh netstat

 

netstat giúp bạn xem thông tin về kết nối mạng, bảng định tuyến và tiến trình đang lắng nghe cổng.

 

Cú pháp:


 
sudo netstat -tulpn | grep :<PORT_NUMBER>
 

Trong đó:

 

  • -t: Liệt kê kết nối TCP

 

  • -u: Liệt kê kết nối UDP

 

  • -l: Chỉ hiển thị các cổng đang lắng nghe

 

  • -p: Hiển thị PID và tên chương trình

 

  • -n: Hiển thị địa chỉ và số cổng dưới dạng số

 

Ví dụ:


 
sudo netstat -tulpn | grep :22
 

Để kết thúc tiến trình có PID 987:


 
sudo kill -9 987
 

3. Dùng lệnh fuser

 

fuser là cách nhanh nhất để xác định tiến trình đang sử dụng một port cụ thể.

 

Cú pháp:


 
sudo fuser <PORT_NUMBER>/tcp
 

Hoặc với UDP:


 
sudo fuser <PORT_NUMBER>/udp

Ví dụ:


 
sudo fuser 3000/tcp
 

Kết quả trả về là PID, ví dụ: 54321.

 

Dừng tiến trình đang dùng port 3000:


 
sudo fuser -k 3000/tcp
 
 

Cách xử lý lỗi “Port Already In Use” trên Windows

 

 1. Dùng Task Manager

 

  1. Chuột phải vào thanh Taskbar → chọn Task Manager.

  2. Chuyển sang tab Performance, mở Resource Monitor, sau đó chọn tab Network.

  3. Kiểm tra danh sách port đang mở và PID của tiến trình chiếm cổng.

  4. Sang tab Details, tìm PID tương ứng → Chuột phải → chọn End Task để dừng tiến trình.

 

2. Dùng Command Prompt

 

Bạn có thể xác định và kết thúc tiến trình bằng dòng lệnh tương tự Linux.

 

Bước 1: Kiểm tra port


 
netstat -aon | findstr "8080"
 

Bước 2: Dừng tiến trình theo PID

 

taskkill /PID <process_id> /F
 

Thay <process_id> bằng PID thực tế để giải phóng cổng.

 

Tổng kết:


Lỗi “Port Already In Use” không khó xử lý nếu bạn biết cách xác định tiến trình chiếm cổng và dừng nó đúng cách. Việc nắm vững các công cụ như lsof, netstat, fuser (trên Linux) và netstat, taskkill (trên Windows) sẽ giúp bạn xử lý nhanh mọi xung đột port chỉ trong vài giây.

 

 HỖ TRỢ TRỰC TUYẾN