前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战-配置+OmitStackTraceInFastThrow 导致不打印日志具体信息

实战-配置+OmitStackTraceInFastThrow 导致不打印日志具体信息

作者头像
逍遥壮士
发布2021-08-25 15:17:45
1.3K0
发布2021-08-25 15:17:45
举报
文章被收录于专栏:技术趋势技术趋势

运营人员反馈线上某些操作异常,导致无法继续业务流程,但是只有个别操作会出现,通过查询发现异常如下:

很奇怪的一种发现,api去调dubbo发现居然只有api的空指针,但是没有具体的原因。继续排查dubbo。

通过invoke 调用dubbo接口发现,异常居然打印不全.....只有java.lang.NullPointerException

百思不得其解.....

其间,通过查询日志发现的确日志只有这么一点点...

查询其他异常没有发现~

复现也未复现出来~

...

后面通过一位大佬的提醒说,jvm默认是启用:-XX:+OmitStackTraceInFastThrow 当打印同样错误日志到一定次数就会被jvm默认优化掉。

立即马上重启服务,再invoke一下,发现如下:

总算复现以上bug,但是为什么只有空指针异常没有详细信息呢?

通过查询jdk5以后jvm做了一个优化,当同样错误日志频繁打印,JIT会重新编译抛出没有堆栈的信息异常。该默认式在-server 模式下是默认开启的~~

复现代码:

package com.jvm.omitstacktraceinfastthrow;

/**
 * @author: csh
 * @Date: 2021/1/28 09:48
 * @Description:
 */
public class OmitStackTraceInFastThrowStudy {


        private static String userName;
        private static Integer age;


    public static void main(String[] args) {
        while (true){
            try {
                userName.length();
                int i = age;
            }catch (Exception e){
                e.printStackTrace();
            }
        }


    }
}

刚开始

最后到一定数量虚拟机就直接吃掉堆栈错误信息,只剩下空指针异常~

配置打印全部日志

-XX:-OmitStackTraceInFastThrow

可以看出打印了全部日志

最后查询该问题的方法有三:

1.查询历史日志,如果日志量比较大的话就很难了~~

2.重启服务调用对应接口,再观查看;

3.直接关闭优化改为:-XX:-OmitStackTraceInFastThrow

参考文章:

https://www.cnblogs.com/liushijie/p/5446347.html

http://www.voidcn.com/article/p-tzxpekml-bn.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档