# 为什么有些异常没有堆栈
使用过程中可能会出现如下图所示的异常信息中堆栈为空的情况,不利于排查问题。
# 原因
JVM针对频繁出现的异常做了优化,可以在出现异常的时候快速抛出,不需要打印出整个调用链,这样可以节省异常堆栈的内存分配。
# 解决方法
禁用该优化,JVM增加XX:-OmitStackTraceInFastThrow
参数(参考:Tomcat设置启动环境变量),显示完整异常。
Windows下,在setenv.bat
或catalina.bat
中添加以下代码
set JAVA_OPTS=%JAVA_OPTS% -XX:-OmitStackTraceInFastThrow
Linux下,在setenv.sh
或catalina.sh
中添加以下代码
export JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"
0条评论
评论