您的位置 首页 java

nested exception is java.lang.StackOverflowError解析

背景介绍:

项目是 微服务 的,使用docker容器,使用jenkins部署。 测试环境 有个公共服务一直以来都能正常发布,突然有一天不行了,经常发布失败,然后多发布几次就好了。

报错如下:

栈溢出了 ,一般是新代码有死循环会出现。但是本地启动没问题并且环境上多发几次也能成功,说明没有死循环,肯定是其他原因。

分析问题:

Java 运行时数据区分5部分:

从报错上来看是虚拟机栈溢出。

虚拟机 栈是属于线程私有的,每个线程都会有一个虚拟机栈,随线程的创建而创建,消失而消失。它由一个个的栈帧组成,线程每次调用一个方法,就会有一个栈帧生成,并压栈。方法调用完之后,栈帧则出栈。当栈的深度不够,即栈的大小不足以放下所有的栈帧的时候,就会抛栈溢出的异常。

问题明确了,是栈的大小不够。

解决问题:

要把栈大小设置的大一点,要设置的大一点首先要知道目前是多大。项目未对虚拟机栈的大小作设定,也就是说目前的大小是默认值。

JDK5之后每个栈大小是1M,之前是256k。我们用的是JDK8,那么大小就是1M。要把栈大小设成大于1M的值。但是又不能设置太大,因为如果单个 线程 栈太大,就会限制最大线程数量。

项目没有高并发的情况,所以就先设置成2M。设置方法,在JVM启动参数里面加上 Xss 2m

问题解决,再也没出现过问题。

文章来源:智云一二三科技

文章标题:nested exception is java.lang.StackOverflowError解析

文章地址:https://www.zhihuclub.com/192079.shtml

关于作者: 智云科技

热门文章

网站地图