大家好:
我有个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。 |
你的理解没有错。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: > 大家好: > 我有个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。 |
hi Xintong:
direct内存随着gc释放,是当maxDirectMemory不足的时候由system.gc()释放的吧,由于实际内存比设置的大,可能maxDirectMemory还没有达到就已经超内存被kill掉了。 ------------------ 原始邮件 ------------------ 发件人: "user-zh" <[hidden email]>; 发送时间: 2020年10月9日(星期五) 上午10:53 收件人: "user-zh"<[hidden email]>; 主题: 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]> 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。 |
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: > > direct内存随着gc释放,是当maxDirectMemory不足的时候由system.gc()释放的吧,由于实际内存比设置的大,可能maxDirectMemory还没有达到就已经超内存被kill掉了。 > > > > > ------------------ 原始邮件 ------------------ > 发件人: > "user-zh" > < > [hidden email]>; > 发送时间: 2020年10月9日(星期五) 上午10:53 > 收件人: "user-zh"<[hidden email]>; > > 主题: 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]> > 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。 |
Free forum by Nabble | Edit this page |