Jvm ApacheFlink:与网络内存段的直接内存关系

Jvm ApacheFlink:与网络内存段的直接内存关系,jvm,apache-flink,heap-memory,flink-streaming,Jvm,Apache Flink,Heap Memory,Flink Streaming,我正在运行Flink 1.8版 主要配置如下: env.java.opts: -Djavax.net.ssl.keyStoreType=JKS -Djavax.net.ssl.trustStoreType=JKS taskmanager.heap.size: 12288m taskmanager.numberOfTaskSlots: 7 声明的堆大小是12GB,为什么在概述部分显示为7.33GB 根据文档,Heap Size=声明的堆大小-网络缓冲内存(默认值:声明的堆的0.1倍,但最大为1g

我正在运行Flink 1.8版

主要配置如下:

env.java.opts: -Djavax.net.ssl.keyStoreType=JKS -Djavax.net.ssl.trustStoreType=JKS
taskmanager.heap.size: 12288m
taskmanager.numberOfTaskSlots: 7
声明的堆大小是12GB,为什么在概述部分显示为7.33GB

根据文档,
Heap Size=声明的堆大小-网络缓冲内存(默认值:声明的堆的0.1倍,但最大为1gb)
。所以正确的值是JVM(堆/非堆)部分中显示的值,即11GB

网络内存段
:我假设,由于1GB现在被用作网络缓冲内存,所以32768段基本上是指32KiB大小的内存段的计数。这些用于任务之间传输数据的TCP通道。我的理解是,它仍然在堆上(因此从声明的堆中减去),但分配的
更像是ByteBuffer.allocate()
。对吗

特别是在本博客之后,
默认情况下,服务初始化后可用的JVM堆的70%由MemoryManager分配。
。因此,这是任务以内存段的形式使用的内存,用于缓冲检查点对齐、广播数据、窗口数据等的数据。因为
taskmanager.memory.off-heap=false
在这种情况下,此内存将在堆上分配。因此,我假设这里显示的4.95GB已用内存基本上是任务使用的内存,用于从托管内存中缓冲用于各种目的的数据,该内存应为
11GB*0.7=7.7GB

如何访问此
托管内存
指标。是否有一个指标暴露了这一点

而且

直接内存和映射内存度量是指什么。我正在使用RocksDB作为我的状态后端。那么,是状态的大小,它是在堆外管理的吗?Flink如何确定其容量和使用率。如果可能,由于该值的错误配置,可能会出现什么样的问题


此外,这是一个流媒体作业,如果这有什么关系的话

网络缓冲区脱离堆。这是我可以自信地回答的一点

否则,请参阅本文末尾关于内存的部分:。希望这会有所帮助