博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一行日志引发的血案--程序异常中断却没有日志
阅读量:4215 次
发布时间:2019-05-26

本文共 771 字,大约阅读时间需要 2 分钟。

一个新项目要把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系统日志。

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

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

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

转载地址:http://xqnmi.baihongyu.com/

你可能感兴趣的文章
几种典型的反病毒技术:特征码技术、覆盖法技术等
查看>>
Software Security Testing软件安全测试
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>
解决Github代码下载慢问题!
查看>>
LeetCode-栈|双指针-42. 接雨水
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>
HTML条件注释
查看>>
内核态与用户态
查看>>
使用mingw(fedora)移植virt-viewer
查看>>
趣链 BitXHub跨链平台 (4)跨链网关“初介绍”
查看>>
C++ 字符串string操作
查看>>
MySQL必知必会 -- 了解SQL和MySQL
查看>>
MySQL必知必会 -- 数据检索
查看>>