You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK1.8.0_351部署时创建NioEventLoopGroup触发StackOverflowError求助

JDK 1.8.0_351下NioEventLoopGroup初始化触发StackOverflowError问题分析与解决

报错堆栈信息

Exception in thread "Thread-8" java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
...
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at io.netty.channel.nio.NioEventLoop.newTaskQueue0(NioEventLoop.java:279)
at io.netty.channel.nio.NioEventLoop.newTaskQueue(NioEventLoop.java:150)
at io.netty.channel.nio.NioEventLoop.<init>(NioEventLoop.java:138)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:146)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:58)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:96)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:91)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:72)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:52)
at handling.mina.ServerConnection.<init>(ServerConnection.java:36)

触发场景

执行代码this.bossGroup = (EventLoopGroup)new NioEventLoopGroup(1);时触发该错误,仅在部署环境中出现,本地IDEA运行无异常;且仅在JDK版本为1.8.0_351时存在,其他JDK版本未发现该问题。

问题原因分析

  1. JDK版本兼容性问题:JDK 1.8.0_351在类加载机制上存在特定变更,导致Netty初始化NioEventLoopGroup时,类加载过程中栈帧占用过高,触发StackOverflowError。该版本类加载器处理部分类加载请求时的逻辑,比其他JDK版本更消耗栈空间。
  2. 部署环境JVM栈配置限制:部署环境的JVM默认栈大小(-Xss参数)可能小于本地IDEA环境,在JDK 1.8.0_351的类加载逻辑下,刚好达到栈溢出阈值。
  3. Netty版本适配问题:当前使用的Netty版本未针对JDK 1.8.0_351的类加载变更做适配,导致初始化过程中出现类加载递归或依赖冲突。

解决办法

  • 更换JDK版本:升级JDK到1.8.0_361及以上版本,或降级到1.8.0_342及以下版本,避开存在问题的1.8.0_351版本。
  • 调整JVM栈大小:在部署环境的JVM启动参数中增大栈空间,例如设置-Xss1m(默认一般为512k),容纳类加载过程中的栈帧消耗。
  • 升级Netty版本:将Netty版本升级到适配JDK 1.8.0_351的稳定版本(如4.1.85.Final及以上),这类版本通常修复了特定JDK版本的兼容性问题。
  • 检查部署环境类路径:确认部署环境类路径中无重复的Netty依赖或JDK相关类,避免类加载冲突引发异常加载逻辑。

内容的提问来源于stack exchange,提问作者Chao Wei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:35:16