NullPointerException异常丢失堆栈信息

简介: 问题描述手下一个项目,日志中存在以下没有任何堆栈信息的异常:这是Hotspot虚拟机的fast throw机制对抛出异常的优化导致。当nullpointer、除零等异常在相同位置抛出一定多次后,优化机制会去掉堆栈信息缩短抛出流程的时间。

问题描述

手下一个项目,日志中存在以下没有任何堆栈信息的异常:


img_222df3fcd80a5e495526f01c614e3f84.png

这是Hotspot虚拟机的fast throw机制对抛出异常的优化导致。当nullpointer、除零等异常在相同位置抛出一定多次后,优化机制会去掉堆栈信息缩短抛出流程的时间。

solution

增加启动参数:-XX:-OmitStackTraceInFastThrow。例:

  • 命令行方式
java -XX:-OmitStackTraceInFastThrow -classpath . NpeThief
  • tomcat启动参数
Environment='CATALINA_OPTS=-Xms512M -Xmx2048M -server -XX:+UseParallelGC -XX:-OmitStackTraceInFastThrow'

参考

1.http://jawspeak.com/2010/05/26/hotspot-caused-exceptions-to-lose-their-stack-traces-in-production-and-the-fix/
2.https://stackoverflow.com/questions/16568253/difference-between-jvm-and-hotspot

目录
相关文章
|
4月前
|
C++
C++ 捕获所有异常并拿到错误原因的方法
C++ 捕获所有异常并拿到错误原因的方法
|
4月前
|
Java C++ Spring
解决NoUniqueBeanDefinitionException异常的方法
了解Spring框架中`NoUniqueBeanDefinitionException`异常的原因和解决方案。此异常发生在容器内有多个相同类型的bean时,Spring无法决定注入哪个bean。解决方法包括:使用`@Primary`注解标记首选bean,利用`@Qualifier`注解配合`@Autowired`、`@Resource`、`@Inject`或`@Value`指定bean名称。选择哪种方法取决于业务需求和具体场景,预防措施是避免创建多个同类型bean或使用`@Primary`注解。
182 0
打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快
打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快
326 0
|
12天前
|
运维 算法 Java
异常和异常调用链
【9月更文挑战第6天】在软件开发中,“异常”指程序运行时发生的错误事件,包括语法、逻辑和运行时错误。异常可通过try-catch捕获、throw抛出或自定义异常类处理。“异常调用链”则记录了异常发生时的方法调用路径,有助于调试、理解程序流程及生成错误报告。开发中正确处理异常可提升程序稳定性,调用链则加速问题定位与解决。
|
3月前
|
Java 测试技术
解决NullReferenceException异常的方法分析
解决NullReferenceException异常的方法分析
|
10月前
|
前端开发 rax Linux
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
103 0
|
存储 JSON 数据格式
|
10月前
|
Java
强制要求JVM始终抛出含堆栈的异常(-XX:-OmitStackTraceInFastThrow)
强制要求JVM始终抛出含堆栈的异常(-XX:-OmitStackTraceInFastThrow)
124 0
|
12月前
统一500异常( 非抛出的异常)
统一500异常( 非抛出的异常)
SSB配置异常引起的问题
这篇是两个SSB配置异常导致的问题总结,第一个问题很简单,但是由于第一次看到这种log,看起来也比较蒙,另外也是没想到还能有这么弱鸡的问题;之后又遇到了另外一个SSB相关的问题,因为涉及时频域资源的确定,看起来相对来说就比较费劲,这两个都是lab问题。