You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "蒋佳成(Jiacheng Jiang)" <92...@qq.com> on 2020/10/09 03:45:02 UTC
回复: flink on yarn 内存
hi Xintong:
direct内存随着gc释放,是当maxDirectMemory不足的时候由system.gc()释放的吧,由于实际内存比设置的大,可能maxDirectMemory还没有达到就已经超内存被kill掉了。
------------------ 原始邮件 ------------------
发件人: "user-zh" <tonysong820@gmail.com>;
发送时间: 2020年10月9日(星期五) 上午10:53
收件人: "user-zh"<user-zh@flink.apache.org>;
主题: Re: flink on yarn 内存
你的理解没有错。cutoff 包含的既有 direct 内存也有 native 内存,native 内存是不受 maxDirectMemorySize
控制的。所以严格来说,是存在超用的可能性的。
我们无法准确知道 cutoff 内存中 direct/native 分别是多少,因此只能根据 direct 内存可能使用的最大值(即假设 cutoff
全部为 direct 内存)去设置 maxDirectMemorySize。如果设置的 maxDirectMemorySize 比实际需要的
direct 内存小,是一定会触发 OOM 的;反之如果设置的 maxDirectMemorySize 比实际需要的 direct
内存大,却不一定会用满 maxDirectMemorySize 指定的内存大小,因为即使没有达到上限,不用的 direct 内存还是会随着 GC
被释放掉。
Thank you~
Xintong Song
On Tue, Oct 6, 2020 at 9:58 PM 蒋佳成(Jiacheng Jiang) <920334586@qq.com> wrote:
> 大家好:
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;我有个flink on
> yarn的内存问题,flink版本是1.7.2,因此没有新的内存模型。在on
> yarn模式下,taskmanager.heap.size设定的是container的内存大小,当container内存超了后会被kill掉。我发现taskmanager.heap.size
> = xmx+maxDirectMemorySize,而默认情况下,xmx = taskmanager.heap.size - cutoff -
> network,也就是说maxDirectMemorySize = cutoff +
> network。network的确是受maxDirectMemorySize控制。问题是,cutoff包含了哪些内存?cutoff包含的内存都受maxDirectMemorySize控制吗?我感觉cutoff包含的内存并不完全受maxDirectMemorySize控制,例如metaspace还有其他运行时空间,这样的话实际消耗的内存可能会大于container的内存,造成kill。
Re: flink on yarn 内存
Posted by Xintong Song <to...@gmail.com>.
direct 内存用量触及 maxDirectMemorySize 只是触发 GC 的一个条件,其他像 heap 空间不足、metaspace
空间不足也都有可能触发 GC。一般情况下,heap 上的内存申请释放活动会更加活跃,会比 direct 内存更早触发
GC。当然也不排除在一些特殊的情况下,direct 内存会先达到上限,因此还是存在 container 超用的可能的。
Thank you~
Xintong Song
On Fri, Oct 9, 2020 at 11:45 AM 蒋佳成(Jiacheng Jiang) <92...@qq.com>
wrote:
> hi Xintong:
>
> direct内存随着gc释放,是当maxDirectMemory不足的时候由system.gc()释放的吧,由于实际内存比设置的大,可能maxDirectMemory还没有达到就已经超内存被kill掉了。
>
>
>
>
> ------------------ 原始邮件 ------------------
> 发件人:
> "user-zh"
> <
> tonysong820@gmail.com>;
> 发送时间: 2020年10月9日(星期五) 上午10:53
> 收件人: "user-zh"<user-zh@flink.apache.org>;
>
> 主题: Re: flink on yarn 内存
>
>
>
> 你的理解没有错。cutoff 包含的既有 direct 内存也有 native 内存,native 内存是不受 maxDirectMemorySize
> 控制的。所以严格来说,是存在超用的可能性的。
>
> 我们无法准确知道 cutoff 内存中 direct/native 分别是多少,因此只能根据 direct 内存可能使用的最大值(即假设 cutoff
> 全部为 direct 内存)去设置 maxDirectMemorySize。如果设置的 maxDirectMemorySize 比实际需要的
> direct 内存小,是一定会触发 OOM 的;反之如果设置的 maxDirectMemorySize 比实际需要的 direct
> 内存大,却不一定会用满 maxDirectMemorySize 指定的内存大小,因为即使没有达到上限,不用的 direct 内存还是会随着 GC
> 被释放掉。
>
> Thank you~
>
> Xintong Song
>
>
>
> On Tue, Oct 6, 2020 at 9:58 PM 蒋佳成(Jiacheng Jiang) <920334586@qq.com>
> wrote:
>
> > 大家好:
> > &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;我有个flink on
> > yarn的内存问题,flink版本是1.7.2,因此没有新的内存模型。在on
> >
> yarn模式下,taskmanager.heap.size设定的是container的内存大小,当container内存超了后会被kill掉。我发现taskmanager.heap.size
> > = xmx+maxDirectMemorySize,而默认情况下,xmx = taskmanager.heap.size - cutoff
> -
> > network,也就是说maxDirectMemorySize = cutoff +
> >
> network。network的确是受maxDirectMemorySize控制。问题是,cutoff包含了哪些内存?cutoff包含的内存都受maxDirectMemorySize控制吗?我感觉cutoff包含的内存并不完全受maxDirectMemorySize控制,例如metaspace还有其他运行时空间,这样的话实际消耗的内存可能会大于container的内存,造成kill。