一行日志引发的血案--程序异常中断却没有日志

一个新项目要把log4j换成logback。
网上应该早有这样的案例,同事很快搞定了。
没过几天一个严重的bug,tomcat每过10分钟左右就会出现假死,不响应任何请求。所有请求都超时。重启就好了,10分钟以后又是一样。
日志没有报错。各种怀疑:tomcat并发生数太小、系统文件打开数受限、系统内存太小、有文件流未关闭、后端服务链接池用尽,等等。
几个同事整整查了三天。
后来发现不重启tomcat,重启tomcat访问的后端一个服务,也可以恢复,当然只能是10分钟可用。
开始怀疑是这个服务的问题,但是服务日志也没发现报错。

费尽九牛二虎之力,终于定位到了一个接口,请求这个接口没有响应。

直接debug,发现竟然是一行打印日志的代码出的问题。

logger.debug("handlerAction insert{}", Json.toJson(tDeviceAction));

这再普通不过的代码了。结果表明问题就是在这行,就因为对象的一个属性为空,使得对象转json异常了。程序中断了。

程序异常退出了,tomcat这边链接没有断开,还在等结果,这样的请求多了,tomcat慢慢到达了最大请求数。就会出现无法响应的现象了。

程序异常中断怎么会没有日志呢?怪!怪!

因为是打日志的时候异常了,怎么可能打日志呢。

马上反应过来,是启动脚的问题。

 nohup /usr/local/jdk18/bin/java $JVM_OPTS -Dfile.encoding=UTF-8 com.nq.platform.PlatformMain $* > /dev/null 2>&1 &

我们直接丢弃了java系统日志。

发现这个问题之后,修改了系统中所有的启动脚本。

这个问题可能很低级,但是越是低级的问题越难排查。

希望大家不要犯同样的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值