Wildfly 17.0.1-final(Java 11)BinderService内存泄漏问题求助
我在Java 11环境下运行Wildfly 17.0.1-final服务器,近期尝试让服务器持续运行而非每日重启,却遭遇OutOfMemoryError,正在排查内存泄漏问题。
JSTAT初步观测
运行数小时后,通过jstat查看内存使用情况(E=新生代伊甸区,S=幸存区0+1,O=老年代,M=元空间):
2024-02-05 14:19:01 : 757 Mo [ E= 56 ; S= 32 ; O= 427 ; M= 242 ]
运行数日后:
2024-02-08 14:57:02 : 1562 Mo [ E= 164 ; S= 20 ; O= 1109 ; M= 269 ]
可见老年代内存72小时内增长了700MB。
内存转储分析
生成内存转储文件并使用MAT(Eclipse Memory Analyzer)分析:服务器刚启动时内存占用300MB,运行60+小时后达到900MB。第二次转储显示MSC注册表存在内存泄漏:
由「Module Class Loader for module org.jboss.msc」加载的一个「org.jboss.msc.service.ServiceControllerImpl」实例占用610 317 912字节(65.09%),内存集中在一个「java.lang.Object[]」实例中,该实例占用610 310 360字节(65.08%)。
线程「org.jboss.msc.service.ServiceContainerImpl$ServiceThread @ 0x3c01e4968 MSC service thread 1-1」持有指向「org.jboss.msc.service.ServiceContainerImpl @ 0x3c09140e8」的局部变量或引用,后者是通向「java.lang.Object[47427] @ 0x3f0d928d8」的最短路径。该线程持有的局部变量总大小为4 552字节(0.00%)。
查看占用600MB内存的对象数组,发现其中包含32248个org.jboss.as.naming.service.BinderService实例。
已定位到泄漏点,但不知如何解决?是否有办法清理这些BinderService实例?谷歌上未找到相关内存泄漏的解决方案,恳请提供帮助。
内容的提问来源于stack exchange,提问作者grrosminet

