我的异常栈找不到了
Posted halu126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的异常栈找不到了相关的知识,希望对你有一定的参考价值。
前段时间线上除了个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
以上是关于我的异常栈找不到了的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段