场景描述
最近实习忙了一个子项目,该项目主要开发一个实时数据转化引擎。说白一点,就是利用kafkaStreams读取kafka中的数据,然后将这些数据入库到mysql或者hbase中。这个引擎是单独开发,然后打成一个jar包,通过父项目的调度程序拉起来执行(其实就是执行一个shell脚本)。
问题描述
后来子项目开发完后,我们自己手动调这个程序jar,程序跑得很好;
通过父项目的调度系统拉起该jar包时出问题了,通过执行日志我们发现,程序入库了几万条数据后,就卡死了,不报错也不执行了;
接下来,我们手动拉起这个jar包,程序也执行的很正常;
调度系统调度其他jar包是都没有问题,唯独调度实时数据转化引擎,执行一段时间就卡死。
问题分析
问题主要出在日志上。首先,手动起引擎时,打在控制台的日志是直接输出在界面,是可见的;当我们用调度系统启动引擎时,打在控制台的日志是输出的缓冲区的,一旦这个缓冲区写满,进程进入睡眠。
问题解决
修改后的Logback配置文件:
<root level="info">
<!-- 上线时间STDOUT注释掉,防止缓冲区写满,导致进程睡眠
<appender-ref ref="STDOUT" />-->
<appender-ref ref="FILE" />
</root>