nested exception is java.lang.StackOverflowError解析
2024-09-05 10:44:07
背景介绍:
项目是微服务的,使用docker容器,使用jenkins部署。测试环境有个公共服务一直以来都能正常发布,突然有一天不行了,经常发布失败,然后多发布几次就好了。
报错如下:
是栈溢出了,一般是新代码有死循环会出现。但是本地启动没问题并且环境上多发几次也能成功,说明没有死循环,肯定是其他原因。
分析问题:
Java运行时数据区分5部分:
从报错上来看是虚拟机栈溢出。
虚拟机栈是属于线程私有的,每个线程都会有一个虚拟机栈,随线程的创建而创建,消失而消失。它由一个个的栈帧组成,线程每次调用一个方法,就会有一个栈帧生成,并压栈。方法调用完之后,栈帧则出栈。当栈的深度不够,即栈的大小不足以放下所有的栈帧的时候,就会抛栈溢出的异常。
问题明确了,是栈的大小不够。
解决问题:
要把栈大小设置的大一点,要设置的大一点首先要知道目前是多大。项目未对虚拟机栈的大小作设定,也就是说目前的大小是默认值。
JDK5之后每个栈大小是1M,之前是256k。我们用的是JDK8,那么大小就是1M。要把栈大小设成大于1M的值。但是又不能设置太大,因为如果单个线程栈太大,就会限制最大线程数量。
项目没有高并发的情况,所以就先设置成2M。设置方法,在JVM启动参数里面加上 -Xss2m。
问题解决,再也没出现过问题。
最新文章
- 前端工具gulp使用
- gulp 学习笔记 (初识)
- kvm与selinux
- webdriver hangs when get or click
- yii2.0 DetailView 自定义样式
- 让网站变灰的CSS代码(支持IE、FIREFOX和CHROME)
- unity脚本的基础语法
- hdu2937
- 远程连接mysql数据慢的问题
- windows phone 使用相机并获取图片(3)
- 用maven创建工程
- Eviews 9.0新功能——估计方法(ARDL、面板自回归、门限回归)
- 在Ubuntu14.04上配置jdk环境
- enquire.js-响应css媒体查询的轻量级javascript库
- Python 编程快速上手 第五章总结
- Can't find kernel text map area from kcore
- 数据仓库专题20-案例篇:电商领域数据主题域模型设计v0.2(改进意见征集中)
- ionic 2.x 3.x项目结构解析
- python中,花括号,中括号,小括号的区别
- d3js网络拓扑关系特效可视化展现