Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Garbage collection 弗林克的垃圾收集器_Garbage Collection_Apache Flink_Flink Streaming - Fatal编程技术网

Garbage collection 弗林克的垃圾收集器

Garbage collection 弗林克的垃圾收集器,garbage-collection,apache-flink,flink-streaming,Garbage Collection,Apache Flink,Flink Streaming,我在Flink中查看堆内存图,发现堆内存的价值总是在增长。当GC自身处于活动状态时?是否有处理GC的Flink类?我假设您正在Flink应用程序中执行一些有状态操作。这将导致状态由堆上的Flink管理。如果不清除不相关的状态,它将继续增长并最终导致JVM崩溃 此状态不会被GCed,因为它对您的应用程序至关重要 Java的垃圾收集器很难从应用程序控制。如果机器未处于空闲状态,则只有当它实际达到堆限制时,才可能发生GC 从您的屏幕截图中,我可以看到GC可能从未被调用过。事实上,我甚至没有看到任何问题

我在Flink中查看堆内存图,发现堆内存的价值总是在增长。当GC自身处于活动状态时?是否有处理GC的Flink类?

我假设您正在Flink应用程序中执行一些有状态操作。这将导致状态由堆上的Flink管理。如果不清除不相关的状态,它将继续增长并最终导致JVM崩溃


此状态不会被GCed,因为它对您的应用程序至关重要

Java的垃圾收集器很难从应用程序控制。如果机器未处于空闲状态,则只有当它实际达到堆限制时,才可能发生GC

从您的屏幕截图中,我可以看到GC可能从未被调用过。事实上,我甚至没有看到任何问题。如果您不希望java占用超过50MB的RAM,那么应该相应地设置Xmx。然后,当GC遇到该障碍时,它将被调用

就像游览Java土地一样:当一个对象不再被使用时,内存不会立即被释放。只有在调用GC时,才有可能回收该内存。您为Java VM提供了2GB的RAM,因此它认为可以完全使用2GB而不会引起任何问题。为了提高性能,尽量少调用GC。因此,如果您离限制太远,它可能会选择根本不运行GC

Java的GC不断改进,Java8已经相当老了。较新的版本可能更具攻击性,您可能会在Java13上看到不同的行为。您可以直接在中设置GC。但我认为没有必要这样做

正如Gaurav Kumar所指出的,对于Flink应用程序来说,某些对象永远不会被释放,因为它们是至关重要的(状态)


然而,我不认为你所提供的有任何错误。我猜你还有其他的顾虑,到目前为止你还没有分享。你可以用一种反映你对这个初始问题想法的方式来重新表述你的问题吗?

可以发布你的应用程序的代码。我使用jconsole来查看这个,它有一个用于活动GC的按钮,它可以清理堆内存。显然,它只清理Flink不再需要的堆内存。我使用java8,我读到它使用默认的并行GC。Flink可以修改GC的类型吗?是的,我使用java8,Flink 1.7.1。我有一个来源:卡夫卡主题;我处于流媒体模式。我只使用了一次,并将检查点的间隔固定为12秒。我使用jconsole来查看这个结果,我怀疑较新的Java版本在清理使用率低于3%的堆时会浪费更多的CPU周期。在“游览Java之地”之后,值得注意的是,其他编程语言实际上也不是立即免费的。有一种不同的簿记方式,可以让你画出更好看的图表,而不会对系统造成任何真正的影响。没问题,我想了解它是如何工作的。1,8GB是jdk默认的内存吗?或者,这是否取决于Flink参数?这取决于您如何执行Flink。如果启动群集。如果您在IDE中运行,这取决于您的。我在集群中启动它。有3个过程:1。工作管理流程;2.任务管理程序;3.申请过程。进程1和进程2各有1 Gb内存,第3个进程有1.8 Gb内存,为什么?1.8GB取决于什么?这张图片展示了第三个进程的堆内存使用情况,为什么它是线性的?