问题描述

最近有同事离职,有个项目的紧急需求变更开发就落到我头上了。由于最近都在开发前端,好久没有碰 java,经过一番猛如虎的环境搭建操作以后,刚想有一番作为的时候,发现项目都启动不起来了,控制台死循环了,报错如下:

nested exception is java.lang.StackOverflowError

问题分析

我采用的是 IDEA + Tomcat9 开发,从报错上看是栈溢出,该问题一般是由于代码有死循环产生的。但是我还没大展身手,而且其他同事能正常启动,说明没有死循环。排除了代码的问题,就剩下环境问题,那么问题的最大可能就是虚拟机的栈溢出。

解决方法

我们可以通过调高虚拟机的栈大小来解决,以本文 IDEA + Tomcat9 环境为例。在开发工具 IDEA 中找到项目对应的 TomcatVM options 中增加 -Xss2m(如已存在其他配置项,请使用空格隔开)。如下图所示:

虚拟机每个栈默认1m,通过 -Xss 适当加大其大小,但是不能无限制的加大,会限制最大线程数。