flink on yarn 内存

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

flink on yarn 内存

蒋佳成(Jiacheng Jiang)
大家好:
         我有个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。
Reply | Threaded
Open this post in threaded view
|

Re: flink on yarn 内存

Xintong Song
你的理解没有错。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) <[hidden email]> 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。
Reply | Threaded
Open this post in threaded view
|

回复: flink on yarn 内存

蒋佳成(Jiacheng Jiang)
hi Xintong:
&nbsp; &nbsp;direct内存随着gc释放,是当maxDirectMemory不足的时候由system.gc()释放的吧,由于实际内存比设置的大,可能maxDirectMemory还没有达到就已经超内存被kill掉了。




------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
发送时间:&nbsp;2020年10月9日(星期五) 上午10:53
收件人:&nbsp;"user-zh"<[hidden email]&gt;;

主题:&nbsp;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) <[hidden email]&gt; wrote:

&gt; 大家好:
&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;我有个flink on
&gt; yarn的内存问题,flink版本是1.7.2,因此没有新的内存模型。在on
&gt; yarn模式下,taskmanager.heap.size设定的是container的内存大小,当container内存超了后会被kill掉。我发现taskmanager.heap.size
&gt; = xmx+maxDirectMemorySize,而默认情况下,xmx = taskmanager.heap.size - cutoff -
&gt; network,也就是说maxDirectMemorySize = cutoff +
&gt; network。network的确是受maxDirectMemorySize控制。问题是,cutoff包含了哪些内存?cutoff包含的内存都受maxDirectMemorySize控制吗?我感觉cutoff包含的内存并不完全受maxDirectMemorySize控制,例如metaspace还有其他运行时空间,这样的话实际消耗的内存可能会大于container的内存,造成kill。
Reply | Threaded
Open this post in threaded view
|

Re: flink on yarn 内存

Xintong Song
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) <[hidden email]>
wrote:

> hi Xintong:
> &nbsp;
> &nbsp;direct内存随着gc释放,是当maxDirectMemory不足的时候由system.gc()释放的吧,由于实际内存比设置的大,可能maxDirectMemory还没有达到就已经超内存被kill掉了。
>
>
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:
>                                                   "user-zh"
>                                                                     <
> [hidden email]&gt;;
> 发送时间:&nbsp;2020年10月9日(星期五) 上午10:53
> 收件人:&nbsp;"user-zh"<[hidden email]&gt;;
>
> 主题:&nbsp;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) <[hidden email]&gt;
> wrote:
>
> &gt; 大家好:
> &gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;我有个flink on
> &gt; yarn的内存问题,flink版本是1.7.2,因此没有新的内存模型。在on
> &gt;
> yarn模式下,taskmanager.heap.size设定的是container的内存大小,当container内存超了后会被kill掉。我发现taskmanager.heap.size
> &gt; = xmx+maxDirectMemorySize,而默认情况下,xmx = taskmanager.heap.size - cutoff
> -
> &gt; network,也就是说maxDirectMemorySize = cutoff +
> &gt;
> network。network的确是受maxDirectMemorySize控制。问题是,cutoff包含了哪些内存?cutoff包含的内存都受maxDirectMemorySize控制吗?我感觉cutoff包含的内存并不完全受maxDirectMemorySize控制,例如metaspace还有其他运行时空间,这样的话实际消耗的内存可能会大于container的内存,造成kill。