---
order: 1
---
# 为什么有些异常没有堆栈

使用过程中可能会出现如下图所示的异常信息中堆栈为空的情况，不利于排查问题。
![空白堆栈](./images/2020-05-20-11-38-21.png)

## 原因{#why}

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

## 解决方法{#solution}

禁用该优化，JVM增加`XX:-OmitStackTraceInFastThrow`参数(参考：[Tomcat设置启动环境变量](../install/middleware/tomcat.md#env))，显示完整异常。

Windows下，在`setenv.bat`或`catalina.bat`中添加以下代码

```batch
set JAVA_OPTS=%JAVA_OPTS% -XX:-OmitStackTraceInFastThrow
```

Linux下，在`setenv.sh`或`catalina.sh`中添加以下代码

```sh
export JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"
```
