首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

端口被佔用排查與解決實戰指南

     編輯:Java 綜合教學

常見場景

  • 啟動 Tomcat/服務報錯:Address already in use: JVM_Bind
  • 微服務啟動衝突、Docker 端口映射失敗
  • 開發工具熱部署失敗、舊進程未正確釋放端口

快速定位佔用進程

Windows

# 查看特定端口佔用
netstat -ano | findstr :8080

# 顯示 PID 對應進程名
tasklist | findstr 

# 強制結束進程
taskkill /PID  /F

Linux / macOS

# 查看端口佔用 (需 root 權限看所有進程)
sudo netstat -tulpn | grep :8080
# 或
sudo lsof -i :8080
# 或
ss -tulpn | grep :8080

# 終止進程
kill -9 

常見端口衝突對照表

端口常見服務衝突典型場景
80/443HTTP/HTTPSNginx、Apache、IIS、System 進程
3306MySQL多實例、Docker 映射衝突
5432PostgreSQL本地安裝與容器共存
6379Redis多叢集、哨兵模式
8080Tomcat/Jetty多專案並行、IDE 熱部署殘留
9000PHP-FPM/SonarQube服務重疊
27017MongoDB副本集多節點本地模擬
9200/9300Elasticsearch叢集節點通訊端口

預防與最佳實踐

  1. 配置檔統一管理:專案端口集中在 application.yml/.env,避免硬編碼
  2. 開發環境動態端口:Spring Boot server.port=0 隨機分配,或用 PortOffset 機制
  3. Docker 端口隔離:容器內部端口固定,宿主機映射動態分配(-p 0:8080)
  4. 優雅關閉:實作 ShutdownHook、@PreDestroy 確保釋放端口
  5. 進程管理工具:使用 systemd、Supervisor、PM2 管理服務生命週期

進階排查:TIME_WAIT 狀態大量佔用

# 查看 TIME_WAIT 連線數
netstat -an | grep TIME_WAIT | wc -l

# Linux 核心參數調優 (/etc/sysctl.conf)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 套用
sysctl -p

端口佔用示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved