了解Flink中使用的Status.JVM.Memory.Direct.Memory

时间:2019-05-14 01:03:24

标签: apache-flink flink-streaming

我有一个flink作业一直崩溃。我在此post中提出了有关调试的问题。

此问题已通过为任务管理器增加内存来解决。然后,我在发生崩溃时检查了所有容器的与内存使用相关的指标,我发现其中两个确实具有Status.JVM.Memory.Direct.MemoryUsed的异常值。我有一张图表: jvm.memory.direct.memory_used.png

在Flink官方文档中,它显示为The biggest driver of Direct memory is by far the number of Flink’s network buffers, which can be configured.,但是从任务日志中我没有看到与not enough network buffer相关的任何内容。为了防止将来发生这种情况,我想详细了解这部分内存在Flink中的功能以及图像中这两个异常容器可能发生的情况。谢谢。

1 个答案:

答案 0 :(得分:0)

首先,当它是OutOfMemoryError时,我还需要退出TM的行为而不记录任何问题。

第二,我在直接内存问题上的经验是它并没有由于网络缓冲区而耗尽,而是因为我使用的是调用已分配的直接内存的已编译C代码(在我的情况下为Fasttext)的代码...您确定没有类似的情况吗?发问,因为通常Flink可以避免过度分配内存,这很有益-通常您会遇到诸如“网络缓冲区没有足够的内存”之类的故障。