Flink 任务管理器不卸载类

问题描述 投票:0回答:1

我有独立的 Flink 集群。当我在任务管理器上停止该进程时,作为 ChildFirst 加载的类不会被删除。经过多次启动/停止重复后,元空间超出最大值并抛出 OutOfMemory Metaspace。 我在一个任务管理器中运行servals应用程序。应用程序不同,因此无法将 JAR 文件添加到 /lib 文件夹。多次操作后重新启动TaskManager很麻烦。

VisualVM metaspace overview

Heap dump with dominators

弗林克1.20.0 Java 17.0.11+9

我尝试按照文档中的建议将类加载器顺序更改为父级优先https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/ops/debugging/debugging_classloading/但这不是帮助了。即使如此,这些类也会作为 Child First 加载。

java apache-flink flink-streaming
1个回答
0
投票

Flink 在保留类方面存在问题。这些都与 Hadoop 有关,但也许您的情况也发生了类似的情况。您可以使用如下代码检查挂起的关闭挂钩:

            Class<?> clazz = Class.forName("java.lang.ApplicationShutdownHooks");
            Field field = clazz.getDeclaredField("hooks");
            field.setAccessible(true);
            Map<Thread, Thread> hooks = (Map<Thread, Thread>) field.get(null);
            for (Thread hook : hooks.keySet()) {
                System.out.println(hook.getClass().getName());
            }

您还可以检查活动线程,因为这是代码不被卸载的另一种方式。

© www.soinside.com 2019 - 2024. All rights reserved.