# 为什么有些异常没有堆栈

使用过程中可能会出现如下图所示的异常信息中堆栈为空的情况,不利于排查问题。

空白堆栈

# 原因

JVM针对频繁出现的异常做了优化,可以在出现异常的时候快速抛出,不需要打印出整个调用链,这样可以节省异常堆栈的内存分配。

# 解决方法

禁用该优化,JVM增加XX:-OmitStackTraceInFastThrow参数(参考:Tomcat设置启动环境变量),显示完整异常。

Windows下,在setenv.batcatalina.bat中添加以下代码

set JAVA_OPTS=%JAVA_OPTS% -XX:-OmitStackTraceInFastThrow

Linux下,在setenv.shcatalina.sh中添加以下代码

export JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"
是否有帮助?
0条评论
评论