Apache Flink: прямое отношение памяти к сегментам сетевой памяти - PullRequest
0 голосов
/ 03 ноября 2019

enter image description here

Я использую Flink версии 1.8.

Основная конфигурация следующая:

env.java.opts: -Djavax.net.ssl.keyStoreType=JKS -Djavax.net.ssl.trustStoreType=JKS
taskmanager.heap.size: 12288m
taskmanager.numberOfTaskSlots: 7

Заявленный размер кучи12 ГБ, почему он показывает 7,33 ГБ в разделе обзора.

Согласно документам Heap Size = declared heap size - network buffer memory(Default: 0.1 times declared heap but up to max 1gb). Таким образом, правильное значение показано в разделе JVM (Heap / Non-Heap), т.е. 11 ГБ

Network Memory Segments: Я полагаю, поскольку 1 ГБ сейчас используется в качестве сетевой буферной памяти, поэтому 32768 сегментов в основном относятся к количеству сегментов памяти размером 32 КБ. Они используются для каналов TCP для передачи данных между задачами. Насколько я понимаю, он все еще находится в куче (и, следовательно, вычитается из объявленной кучи), но выделен more like ByteBuffer.allocate(). Это правильно?

После этого блога Жонглирование битами и байтами , в частности By default 70% of the JVM heap that is available after service initialisation is allocated by the MemoryManager.. Так что это память, используемая задачами в виде сегментов памяти для буферизации данных на них для выравнивания контрольных точек, широковещательных данных, оконных данных и т. Д. Поскольку taskmanager.memory.off-heap = false в этом случае, эта память будет выделяться в куче. Поэтому я предполагаю, что показанная здесь 4,95 ГБ используемая память - это в основном память, используемая задачами для буферизации данных для различных целей из управляемой памяти, которая должна быть 11GB * 0.7 = 7.7GB.

Как я могу получить доступ к этому managed memory метрическаяИмеется ли для этого метрика.

Кроме того,

Что относится к метрике прямой памяти и отображенной памяти. Я использую RocksDB в качестве своего бэкэнда состояния. Так это размер государства, который управляется из кучи? Как емкость и использование этого определяется Flink. Какие проблемы могут быть обнаружены из-за неправильной конфигурации, если возможно, этого значения.

Кроме того, это потоковое задание, если так или иначе имеет значение.

1 Ответ

0 голосов
/ 04 ноября 2019

Сетевые буферы находятся вне кучи. Это один момент, на который я могу с уверенностью ответить.

В противном случае см. Раздел «Память» в конце этого сообщения в блоге: https://flink.apache.org/news/2019/02/25/monitoring-best-practices.html. Надеюсь, это поможет.

...