SpringBoot cmd執行專案後日志卡住,專案停止響應請求的解決辦法
阿新 • • 發佈:2021-01-14
原文連結:https://blog.wanvale.com/archives/170/
概述
本地部署專案後不知道什麼原因,專案在cmd中卡住,沒有反應。
日誌停止輸出且前端發請求也沒有響應,一直在等待。
問題分析
首先,專案打包成jar,啟動方式是windows cmd,批處理內容如下
java -jar dev.jar
主要考慮的方面是以下幾點:
- 是否日誌輸出超出緩衝區大小導致程式假死
- 是否程式碼問題,處理資料邏輯錯誤
- 是否與內嵌tomcat有關
另外很重要的一點是部署專案的另一臺機器上執行出現bug前同樣的操作並不能被複現,且該bug出現的概率非常小。
問題排查
日誌排查
問題發生後,服務端並沒有關閉
首先審查日誌檔案
但日誌檔案並沒有輸出任何錯誤,也並未提供任何有價值的資訊
程式碼排查
初步推測可能是攔截器未做出響應
複查攔截器相關程式碼發現並非該原因
日誌非同步
考慮到可能是日誌非非同步輸出的問題,但經過測試並非該問題
關鍵點
因為bug沒法復現,便準備重啟,按下Ctrl+C的一瞬間,卡住的日誌都重新整理了出來,伺服器也能正常接收請求了。
再次分析
很明顯是cmd中執行的程式進入了阻塞狀態,在等待使用者操作。檢查了cmd的狀態,發現了cmd視窗標題上的字樣發生改變:
標題欄中的“選擇”字樣消失了
解決方法
經查,是cmd開啟了快速編輯模式導致的。
問題解決
總結
專案在Windows上執行的坑總是多於linux。
建議優先使用linux部署專案。