我有一个在 java 11 上运行的 Wildfly 17.0.1-final 服务器。 几周以来,我尝试让它连续运行,而不是每晚重新启动它。我遇到了一些 OutOfMemoryError 。所以我正在寻找泄漏。
首次与 JSTAT 建立 : 几个小时后,我可以使用 jstat 查看内存使用情况(E = eden/young,S = Survivor 0+1,O = old,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 小时内增长了 700 Mo
内存转储: 我已经完成了内存转储并在 MAT(Eclipse 内存分析器)中打开它们。第一个是在 Wildfly 启动后报告内存占用为 300 MB。工作 60 多个小时后的第二个报告报告内存占用为 900 MB。 第二个转储报告 MSC 注册表中存在内存泄漏:
由《org.jboss.msc 模块的模块类加载器》加载的《 org.jboss.msc.service.ServiceControllerImpl 》的一个实例占用 610317912 (65,09 %) 字节。内存累积在《 java.lang.Object[] 》的一个实例中,由《 》加载,占用 610310360 (65,08 %) 字节。
线程 « org.jboss.msc.service.ServiceContainerImpl$ServiceThread @ 0x3c01e4968 MSC 服务线程 1-1 » 有一个本地变量或对 « org.jboss.msc.service.ServiceContainerImpl @ 0x3c09140e8 » 的引用,该变量位于最短路径上« java.lang.Object[47427] @ 0x3f0d928d8 »。线程 org.jboss.msc.service.ServiceContainerImpl$ServiceThread @ 0x3c01e4968 MSC 服务线程 1-1 保留总大小为 4552 (0,00 %) 字节的局部变量。
如果我查看保留 600 MB 内存的对象数组,它似乎包含 32248 个 org.jboss.as.naming.service.BinderService 实例。
所以,这就是泄漏。但我该如何解决呢?有什么方法可以处理这些 BinderServices 吗?
我在 google 上没有找到任何有关 BinderService 内存泄漏的信息。
感谢您的帮助
您可能会发现一个内存泄漏的错误,请尝试在此处提出问题: https://issues.redhat.com/projects/WFLY/issues/WFLY-18700?filter=allopenissues