查看: 240|回复: 0

nested exception is java.lang.StackOverflowError解析

[复制链接]
 楼主| 发表于 2020-3-26 01:56:56 | 显示全部楼层 |阅读模式
背景先容:
项目是微服务的,使用docker容器,使用jenkins摆设。测试环境有个公共服务一直以来都能正常发布,突然有一天不行了,经常发布失败,然后多发布几次就好了。
报错如下:



是栈溢出了,一般是新代码有死循环会出现。但是本地启动没题目而且环境上多发几次也能成功,说明没有死循环,肯定是其他缘故原由。
分析题目:
Java运行时数据区分5部门:



从报错上来看是假造机栈溢出。
假造机栈是属于线程私有的,每个线程都会有一个假造机栈,随线程的创建而创建,消失而消失。它由一个个的栈帧组成,线程每次调用一个方法,就会有一个栈帧生成,并压栈。方法调用完之后,栈帧则出栈。当栈的深度不够,即栈的巨细不足以放下全部的栈帧的时间,就会抛栈溢出的异常。
题目明白了,是栈的巨细不够。
解决题目:
要把栈巨细设置的大一点,要设置的大一点首先要知道现在是多大。项目未对假造机栈的巨细作设定,也就是说现在的巨细是默认值。
JDK5之后每个栈巨细是1M,之前是256k。我们用的是JDK8,那么巨细就是1M。要把栈巨细设成大于1M的值。但是又不能设置太大,由于如果单个线程栈太大,就会限制最大线程数目。
项目没有高并发的环境,以是就先设置成2M。设置方法,在JVM启动参数里面加上 -Xss2m。
题目解决,再也没出现过题目。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?用户注册

x

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表