码迷,mamicode.com
首页 > 其他好文 > 详细

我的异常栈找不到了

时间:2017-11-25 17:21:35      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:nfa   ons   com   日志   oid   with   代码   err   ast   

前段时间线上除了个NPE的故障,查询日志的是时候死活找不到对应的异常栈

只能在日志里找到光秃秃的多行如下的日志:

xxxxxx:java.lang.NullPointerException
xxxxxx:java.lang.NullPointerException
xxxxxx:java.lang.NullPointerException
xxxxxx:java.lang.NullPointerException

当时就愤怒,这个哪个XX写的代码为啥try catch后不打印异常栈,这怎么让我查问题原因呢!疯了!

随即就扒代码,发现代码明明写的非常棒

1 try {
2      xxx;
3 } catch (Exception e) {
4      logger.error("xxxxx, message={}", e.getMessage(), e);
5 }

由于出错的代码再出问题时,会自动重试多次,我就找了前几次重试的track查了下,这次有异常栈了!

是不是很诡异!

事后查了下谷姐度娘发现这是JVM的内部优化造成的,JVM会认为这个异常栈已经打印了好多了,再打下去,没有任何意思,而且浪费你的磁盘空间。

JVM是否进行这个优化是有一个JVM参数控制的,可以通过启用这个JVM参数: -XX:-OmitStackTraceInFastThrow 来让JVM忽略这个优化

复现栗子:

 1 public class TestN {
 2     public static void main(String[] args) {
 3         while (true) {
 4             try {
 5                 testNpe(null);
 6             } catch (Exception e) {
 7                 System.out.print("出问题了:");
 8                 e.printStackTrace();
 9             }
10         }
11     }
12 
13     private static void testNpe(String str) {
14         System.out.println(str.toString());
15     }
16 }

 参考:https://stackoverflow.com/questions/2411487/nullpointerexception-in-java-with-no-stacktrace

我的异常栈找不到了

标签:nfa   ons   com   日志   oid   with   代码   err   ast   

原文地址:http://www.cnblogs.com/halu126/p/7895677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!