Hi

单个Slot的managed memory是多少(可以通过webUI或者TM的日志观察到),rocksDB的 block cache 
usage会增长到多少,是一直在增长最终超过单个slot的managed memory么?

RocksDB的内存托管在绝大部分场景下是work的,但是RocksDB本身的实现限制了这个功能完美发挥作用。具体涉及到LRUcache和Writebuffer
 manager之间的对应关系,目前RocksDB的strict cache limit和将write buffer 
manager的内存申请“托管”到cache的功能是不完整的,即使在cache达到capacity的情况下,仍然可以申请内存并插入,所以存在小概率的情况会出现内存超用。

想要绕开这个问题,可以先增大TM的process内存,来增大overhead 内存 [1],可以给RocksDB提供一定的buffer。

从RocksDB的角度的话,增大flush线程数以及降低arena 的size可以降低该问题出现概率。


[1] 
https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/memory/mem_detail.html#overview

祝好
唐云


________________________________
From: 1017517291 <1017517...@qq.com>
Sent: Friday, June 19, 2020 10:31
To: user-zh <user-zh@flink.apache.org>
Subject: flink 1.10 on yarn 内存超用,被kill

Hi,
&nbsp; &nbsp; 社区的大大们好,请教个问题,我最近一个作业在线上运行,运行一天左右就被yarn kill掉了,提示超过内存限制,打印日志如下:


java.lang.Exception: [2020-06-19 00:33:57.249]Container 
[pid=771992,containerID=container_e05_1592035979967_0057_01_000006] is running 
745472B beyond the 'PHYSICAL' memo
ry limit. Current usage: 10.0 GB of 10 GB physical memory used; 19.1 GB of 21 
GB virtual memory used. Killing container.



我的flink版本是1.10,分配的单TaskManager内存为10g, 
查看监控,JVM堆内存一直比较平稳,怀疑是RocksDB使用的存储比较大,打开了RocksDB的block usage监控,确实一直在增长;
然后我调整了taskmanager.memory.managed.fraction为:0.7,但是还是block usage一直增长,最终被kill掉;
我已经开启了state.backend.rocksdb.memory.managed = 
true,按理说,RocksDB托管内存不会一直增长,看1.10官方文档介绍,RocksDB的使用内存会被控制在托管内存之内,但是我的作业使用的block 
usage一直在增长,最终导致被容器kill掉;


想问下
1. 什么情况下RocksDB的内存不受控制,一直增长,超过分配的managed&nbsp;memory
2. 在1.10版本中,还有什么情况,会导致内存超过限制,被yarn kill掉


期待各位大佬回复

回复