1. 程式人生 > 其它 >SpringBoot cmd執行專案後日志卡住,專案停止響應請求的解決辦法

SpringBoot cmd執行專案後日志卡住,專案停止響應請求的解決辦法

技術標籤:經驗分享javajavatomcatbug

原文連結:https://blog.wanvale.com/archives/170/

概述

本地部署專案後不知道什麼原因,專案在cmd中卡住,沒有反應。
日誌停止輸出且前端發請求也沒有響應,一直在等待。

問題分析

首先,專案打包成jar,啟動方式是windows cmd,批處理內容如下

java -jar dev.jar

主要考慮的方面是以下幾點:

  • 是否日誌輸出超出緩衝區大小導致程式假死
  • 是否程式碼問題,處理資料邏輯錯誤
  • 是否與內嵌tomcat有關

另外很重要的一點是部署專案的另一臺機器上執行出現bug前同樣的操作並不能被複現,且該bug出現的概率非常小。

問題排查

日誌排查

問題發生後,服務端並沒有關閉
首先審查日誌檔案
但日誌檔案並沒有輸出任何錯誤,也並未提供任何有價值的資訊

程式碼排查

初步推測可能是攔截器未做出響應
複查攔截器相關程式碼發現並非該原因

日誌非同步

考慮到可能是日誌非非同步輸出的問題,但經過測試並非該問題

關鍵點

因為bug沒法復現,便準備重啟,按下Ctrl+C的一瞬間,卡住的日誌都重新整理了出來,伺服器也能正常接收請求了。

再次分析

很明顯是cmd中執行的程式進入了阻塞狀態,在等待使用者操作。檢查了cmd的狀態,發現了cmd視窗標題上的字樣發生改變:
1.jpg
2.jpg
標題欄中的“選擇”字樣消失了

解決方法

經查,是cmd開啟了快速編輯模式導致的。

在 標題欄右鍵-屬性-編輯選項 中取消勾選“快速編輯模式”。
問題解決

總結

專案在Windows上執行的坑總是多於linux。
建議優先使用linux部署專案。