IDEA關閉SpringBoot程序后仍然占用端口的排查與解決
問題描述
在使用 IntelliJ IDEA 開發 Spring Boot 應用時,有時即使關閉了應用,程序仍然占用端口(例如:4001 端口)。這會導致重新啟動應用時出現端口被占用的錯誤,在windows系統下有時候執行命令netstat -ano | findstr "4001"也無法找到被占用的端口,本文將詳細描述如何解決此問題。
1 問題復現
啟動springboot應用后,提示端口已經被占用
2 排查步驟
1 確認端口占用情況
使用以下命令檢查哪個進程占用了目標端口:
netstat -ano | findstr :<端口號>
示例:檢查 4001 端口是否被占用。
netstat -ano | findstr :4001
正常端口被占用情況下,會顯示如下,畫框部分13036為應用程序PID
2 找到占用端口的進程 ID
在win11下可以直接使用任務管理器搜索PID找到占用端口的程序,例如搜索到4001端口被QQ占用
或者cmd命令框輸入如下命令查找
tasklist | findstr "13036"
3 終止占用端口的進程
直接任務管理器關閉程序
使用以下命令強制終止該進程:
taskkill /PID <PID> /F
示例:
taskkill /PID 13036 /F
注意:極端情況下,idea運行spirngboot程序時,由于強制關閉或者其他原因,造成java程序沒有徹底釋放,還在后臺運行,導致原java程序始終占用著端口,具體表現為:
啟動后端口任被占用 查找被占用的4001端口時,顯示空白找不到
- 解決方法:
- 檢查是否有殘留的 Java 進程:
tasklist | findstr java
- 如果發現多余的 Java 進程,強制結束它:
taskkill /f /pid <PID>
- 檢查是否有殘留的 Java 進程:
示例:強制刪除多余的java線程。
netstat -ano | findstr :22084
netstat -ano | findstr :22320
刪除完畢后,重新啟動springboot程序,端口占用解除,啟動成功。