项目期比较忙,很久没更新了,趁着有时间给大家做一则实际项目中的排查问题分享。
有一次排查线上问题的时候,发现一直再报空指针的错误信息,但是只有错误名称。没有堆栈信息,大家都懂,没有错误的堆栈信息,只能盲猜啊。压根不知道哪一行报错,报错的原因是什么。所以需要先想办法,让程序将堆栈信息打印出来,或者找到报错的堆栈信息才是解决问题的正确思路,这样一来就变成了两个问题。
1. 解决找不到报错堆栈信息的原因,并解决。
2. 通过报错信息解决实际bug。
好了,有了思路就开始下面的阅读并思考问题。
问题现象:
程序日志中大量打印异常,但是只有
java.lang.NullPointerException
复制
没有更详细的信息,期初还以为打印日志的代码写的不规范。如图所示
问题原因:
是因为jvm进行了优化,如频繁的抛出某个异常,会重新编译,不再打印异常堆栈。此时要找堆栈就得到最开头去找了。。。可是最开头可能在几天前,可能日志早就被清理了。
问题解决步骤:
启动jar包时在 启动参数加上
-XX:-OmitStackTraceInFastThrow
复制
禁用该优化,强制打印异常堆栈。当然这会损耗性能且日志过大咯
排查过程:
首先看下logger日志打印是否规范,如下所示:
log.info("打印的日志是:{}",eee);复制
log.error("数据格式有问题",e);复制
再看线上版本是否和线下版本不一致,保证线上线下代码一致,就不需要排查。
最后看下是否频繁报错,对号入座。
文章转载自全栈的程序员,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Java萌新修炼手册⑥:面向对象の修仙奥义——从"散修"到"宗门大佬"的基因飞升!
让天下没有难学的编程
42次阅读
2025-04-25 10:10:40
Java萌新修炼手册②:Hello Worldの108种写法——从入门到入坟!
让天下没有难学的编程
38次阅读
2025-04-21 10:34:36
从 Java 到 Go:面向对象的巨人与云原生的轻骑兵
京东云开发者
35次阅读
2025-04-25 11:41:37
Java萌新修炼手册⑤:数组の千层套路——从"鸽子笼"到"摩天楼"的进阶之路!
让天下没有难学的编程
32次阅读
2025-04-25 10:10:41
Java数据库连接池学习
淡定
32次阅读
2025-04-14 22:46:26
Java萌新修炼手册④:流程控制の三十六计——让代码学会"见风使舵"!
让天下没有难学的编程
27次阅读
2025-04-23 14:33:55
探索虚拟线程:原理与实现
京东云开发者
23次阅读
2025-05-06 17:30:27
Java萌新修炼手册①:开局一把JDK,环境搭建全靠浪!
让天下没有难学的编程
20次阅读
2025-04-21 10:34:37
java浅拷贝BeanUtils.copyProperties引发的RPC异常
京东云开发者
19次阅读
2025-04-30 17:10:50
Java程序使用预处理语句的性能提升
GreatSQL社区
17次阅读
2025-04-23 11:18:50