啟動 Tomcat 時報錯:Bind exception: Address already in use: bind <null:8080>,瀏覽器無法訪問 https://localhost:8080。
# Windows
netstat -ano | findstr :8080
# Linux/macOS
netstat -tlnp | grep :8080
# 或
ss -tlnp | grep :8080
輸出範例:TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 1234,最後一列 PID=1234 即佔用進程。
| 場景 | 處理方式 |
|---|---|
| 非關鍵進程(如舊 Tomcat、測試程序、某些 IDE 內建伺服器) | 直接結束進程:taskkill /PID 1234 /F (Win)kill -9 1234 (Linux) |
| 關鍵業務進程(如生產服務、數據庫、Nginx) | 不可殺死,轉步驟 3 修改 Tomcat 端口 |
| 系統進程/未知進程 | 謹慎處理,可用 tasklist /FI "PID eq 1234" 或 ps -p 1234 -o cmd 查看詳情再決定 |
$CATALINA_HOME/conf/server.xml<Connector port="8080" .../>8088、8888、18080https://localhost:8088-p 0:8080,由反向代理(Nginx/Traefik)路由。/etc/services 註冊自定義端口,避免系統服務搶佔。server.xml 不殺舊進程 → 雙實例衝突、資源洩漏。shutdown port (8005)、AJP port (8009) 同樣可能衝突。netstat 定位 PID → 業務判斷殺否 → 不可殺改端口,三步走解決 99% 端口衝突。養成端口規劃與容器化習慣,從根源消除此類運維干擾。