場景描述
最近實習忙了一個子項目,該項目主要開發一個實時數據轉化引擎。說白一點,就是利用kafkaStreams讀取kafka中的數據,然後將這些數據入庫到mysql或者hbase中。這個引擎是單獨開發,然後打成一個jar包,通過父項目的調度程序拉起來執行(其實就是執行一個shell腳本)。
問題描述
後來子項目開發完後,我們自己手動調這個程序jar,程序跑得很好;
通過父項目的調度系統拉起該jar包時出問題了,通過執行日誌我們發現,程序入庫了幾萬條數據後,就卡死了,不報錯也不執行了;
接下來,我們手動拉起這個jar包,程序也執行的很正常;
調度系統調度其他jar包是都沒有問題,唯獨調度實時數據轉化引擎,執行一段時間就卡死。
問題分析
問題主要出在日誌上。首先,手動起引擎時,打在控制檯的日誌是直接輸出在界面,是可見的;當我們用調度系統啓動引擎時,打在控制檯的日誌是輸出的緩衝區的,一旦這個緩衝區寫滿,進程金輝睡眠。
問題解決
修改後的Logback配置文件:
<root level="info">
<!-- 上線時間STDOUT註釋掉,防止緩衝區寫滿,導致進程睡眠
<appender-ref ref="STDOUT" />-->
<appender-ref ref="FILE" />
</root>