Hi,感谢大家的回复,经过我的分析和测试,我猜测是和taskmanager.network.blocking-shuffle.type=mmap 
有关。我看了下监控,Mappred占用的内存会逐渐升至20多G甚至更高,从而导致超过yarn的限制被杀掉。另一方面,如果我配置成taskmanager.network.blocking-shuffle.type=file,监控Mappred一直为0,最后报错会是OutOfMemoryError:direct
 buffer memory 说明mmap和file用的是不同的存储。 
我有还有两个疑问,一:file模式用的是direct中哪一部分memory。二:对于单表几个T的这种情况,两种模式如何降低内存不够的问题。 -------- 
原始邮件 -------- 发件人: Xintong Song <[email protected]> 日期: 2020年3月24日周二 上午9:58 
收件人: user-zh <[email protected]> 主 题: Re: Flink1.10执行sql超出内存限制被yarn杀掉 Hi 
Faaron, 内存超用被杀说明是 native memory 用的比实际配置多,常见有以下几种可能:    - JVM Overhead 
配置大小不够。这个默认大小是 TM 大小的 10%,但是不会超过 1G。你的情况是 TM    
的总内存比较大,可以尝试调大一点。相关配置项:taskmanager.memory.jvm-overhead.[min|max|fraction]    - 
UDF 中使用了 native memory,可能是用户代码,也可能是依赖的第三方库。这种属于 task off-heap 内存,默认大小是    
0,相关配置项:taskmanager.memory.task.off-heap.size    - 如果使用了 
RocksDBStateBackend,也有可能 RocksDB 的内存超用。Flink 会设置 RocksDB    使用的缓存大小为 managed 
memory 大小,但是我们发现 RocksDB 存在缺陷,在极个别情况下有可能会限制不住。可以尝试关闭    RocksDB 的内存控制,这样 
RocksDB 会使用默认缓存大小,不会随着 Flink TM    
的增大而增大。配置项:state.backend.rocksdb.memory.managed Thank you~ Xintong Song On Mon, 
Mar 23, 2020 at 10:15 PM LakeShen <[email protected]> wrote: > Hi 
farron , > > 能否在详细描述一下你的 SQL 的逻辑 > > > > faaron zheng <[email protected]> 
于2020年3月23日周一 下午10:12写道: > > > > > > 
大家好,我在用flink1.10执行sql时,当数据比较大的时候,3T左右,100多亿条数据,在执行hash和sort的时候经常超出内存限制,被yarn杀掉,我的tm给了40g内存,每个有10个slot,每个slot3g内存。我也试过给更大的内存,但是没什么效果。不知道这是什么原因?
 > > > > > > > > > faaron zheng 邮箱:[email protected] 签名由 网易邮箱大师 定制

回复