hi
我有个测试的单机的standalone flink,平时跑几个测试job,tm内存设置了8g。最近升级了flink1.10,只设置了taskmanager.memory.flink.size为10g。但是启了一个数据量最大的job后,就无法再启动第二个job了,报内存不够:java.lang.OutOfMemoryError: Direct buffer memory。这是1个job就基本把所有的Direct Memory占完了吗?如果是这样的话,flink1.10还适合跑standalone cluster吗?slot没有隔离这个内存吗? 在官网讲解slot的地方有这么一句话:A TaskManager with three slots, for example, will dedicate 1/3 of its managed memory to each slot. 这里的its managed memory指的是taskmanager.memory.managed.size产生指定的内存吗? best Jungle |
你好,
Flink 1.10 对不同的内存类型进行了更精细的控制,明确了总内存中每种类型、用途的内存的大小。举个例子,如果简单考虑 TM 中有 heap, direct, native 三种内存类型,总内存大小是 300mb。在之前的版本中,可能是 heap 固定占用100mb,剩下 direct 和 native 共用 200mb。理论上,direct/native 可以分别占用 200/0, 100/100, 0/200,只要总大小不超过 200 即可。但是一旦出现超用,我们很难判断是 direct 还是 native 内存造成的。在 Flink 1.10 里,对 direct/native 分别用多少也做了明确的划分,这样一旦出现内存不足,就能够知道是哪部分造成的。上述描述是对内存模型做了简化,实际 Flink 考虑的内存类型不只三种,具体可以参考相关文档[1]。 针对你的问题,是 direct 内存不足造成的,在不改变总内存大小的情况下,可以调大 ‘taskmanager.memory.task.off-heap.size’ ,详见[2]。 关于隔离,Flink 中一个 TM 上的多个 slot 是跑在同一个进程中的,由于 JVM 自身的特点,进程内不同线程的内存是没有隔离的。Flink 仅对托管内存(managed memory)[3] 进行了隔离,这部分内存是由 Flink 负责管理申请、分配、释放的,不依赖于 JVM 的垃圾回收机制。托管内存目前仅用于 RocksDBStateBackend 和部分 Batch 算子,与你现在遇到的 direct oom 的问题无关。 Thank you~ Xintong Song [1] https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_detail.html [2] https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_trouble.html#outofmemoryerror-direct-buffer-memory [3] https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_setup.html#%E6%89%98%E7%AE%A1%E5%86%85%E5%AD%98 On Mon, Apr 27, 2020 at 10:31 AM 蒋佳成(Jiacheng Jiang) <[hidden email]> wrote: > hi > > > 我有个测试的单机的standalone > flink,平时跑几个测试job,tm内存设置了8g。最近升级了flink1.10,只设置了taskmanager.memory.flink.size为10g。但是启了一个数据量最大的job后,就无法再启动第二个job了,报内存不够:java.lang.OutOfMemoryError: > Direct buffer memory。这是1个job就基本把所有的Direct > Memory占完了吗?如果是这样的话,flink1.10还适合跑standalone cluster吗?slot没有隔离这个内存吗? > 在官网讲解slot的地方有这么一句话:A TaskManager with three slots, for example, will > dedicate 1/3 of its managed memory to each slot. 这里的its managed > memory指的是taskmanager.memory.managed.size产生指定的内存吗? > > > best > Jungle |
Thank you Xintong.我还有一个问题官网上:
-XX:MaxDirectMemorySizeFramework + Task Off-Heap + Network Memory MaxDirectMemorySize=Framework Off-Heap + Task Off-Heap + Network Memory。假如MaxDirectMemorySize=10,那么10=1+1+8和10=1+8+1,这2种情况有什么不一样吗?我的意思是这3个堆外内存有隔离吗?我之前没有设置task off-heap,但是还能启一个job,感觉没有隔离。 ------------------ 原始邮件 ------------------ 发件人: "Xintong Song"<[hidden email]>; 发送时间: 2020年4月27日(星期一) 中午12:06 收件人: "user-zh"<[hidden email]>; 主题: Re: flink 1.10内存设置 你好, Flink 1.10 对不同的内存类型进行了更精细的控制,明确了总内存中每种类型、用途的内存的大小。举个例子,如果简单考虑 TM 中有 heap, direct, native 三种内存类型,总内存大小是 300mb。在之前的版本中,可能是 heap 固定占用100mb,剩下 direct 和 native 共用 200mb。理论上,direct/native 可以分别占用 200/0, 100/100, 0/200,只要总大小不超过 200 即可。但是一旦出现超用,我们很难判断是 direct 还是 native 内存造成的。在 Flink 1.10 里,对 direct/native 分别用多少也做了明确的划分,这样一旦出现内存不足,就能够知道是哪部分造成的。上述描述是对内存模型做了简化,实际 Flink 考虑的内存类型不只三种,具体可以参考相关文档[1]。 针对你的问题,是 direct 内存不足造成的,在不改变总内存大小的情况下,可以调大 ‘taskmanager.memory.task.off-heap.size’ ,详见[2]。 关于隔离,Flink 中一个 TM 上的多个 slot 是跑在同一个进程中的,由于 JVM 自身的特点,进程内不同线程的内存是没有隔离的。Flink 仅对托管内存(managed memory)[3] 进行了隔离,这部分内存是由 Flink 负责管理申请、分配、释放的,不依赖于 JVM 的垃圾回收机制。托管内存目前仅用于 RocksDBStateBackend 和部分 Batch 算子,与你现在遇到的 direct oom 的问题无关。 Thank you~ Xintong Song [1] https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_detail.html [2] https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_trouble.html#outofmemoryerror-direct-buffer-memory [3] https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_setup.html#%E6%89%98%E7%AE%A1%E5%86%85%E5%AD%98 On Mon, Apr 27, 2020 at 10:31 AM 蒋佳成(Jiacheng Jiang) <[hidden email]> wrote: > hi > > > &nbsp; &nbsp;我有个测试的单机的standalone > flink,平时跑几个测试job,tm内存设置了8g。最近升级了flink1.10,只设置了taskmanager.memory.flink.size为10g。但是启了一个数据量最大的job后,就无法再启动第二个job了,报内存不够:java.lang.OutOfMemoryError: > Direct buffer memory。这是1个job就基本把所有的Direct > Memory占完了吗?如果是这样的话,flink1.10还适合跑standalone cluster吗?slot没有隔离这个内存吗? > 在官网讲解slot的地方有这么一句话:A TaskManager with three slots, for example, will > dedicate 1/3 of its managed memory to each slot.&nbsp;这里的its managed > memory指的是taskmanager.memory.managed.size产生指定的内存吗? > > > best&nbsp; > Jungle |
Framework Off-heap 和 Task Off-Heap 之间是没有隔离的。Network
可以认为和前面两者是有隔离的,会在初始化的时候申请一个固定大小的 buffer pool,整个运行过程中的内存占用是一个常量。 Thank you~ Xintong Song On Mon, Apr 27, 2020 at 6:14 PM 蒋佳成(Jiacheng Jiang) <[hidden email]> wrote: > Thank you Xintong.我还有一个问题官网上: > -XX:MaxDirectMemorySizeFramework + Task Off-Heap + Network Memory > MaxDirectMemorySize=Framework Off-Heap + Task Off-Heap + Network > Memory。假如MaxDirectMemorySize=10,那么10=1+1+8和10=1+8+1,这2种情况有什么不一样吗?我的意思是这3个堆外内存有隔离吗?我之前没有设置task > off-heap,但是还能启一个job,感觉没有隔离。 > > > > ------------------ 原始邮件 ------------------ > 发件人: "Xintong Song"<[hidden email]>; > 发送时间: 2020年4月27日(星期一) 中午12:06 > 收件人: "user-zh"<[hidden email]>; > 主题: Re: flink 1.10内存设置 > > > > 你好, > > > Flink 1.10 对不同的内存类型进行了更精细的控制,明确了总内存中每种类型、用途的内存的大小。举个例子,如果简单考虑 TM 中有 heap, > > direct, native 三种内存类型,总内存大小是 300mb。在之前的版本中,可能是 heap 固定占用100mb,剩下 direct 和 > > native 共用 200mb。理论上,direct/native 可以分别占用 200/0, 100/100, 0/200,只要总大小不超过 200 > > 即可。但是一旦出现超用,我们很难判断是 direct 还是 native 内存造成的。在 Flink 1.10 里,对 direct/native > 分别用多少也做了明确的划分,这样一旦出现内存不足,就能够知道是哪部分造成的。上述描述是对内存模型做了简化,实际 Flink > 考虑的内存类型不只三种,具体可以参考相关文档[1]。 > > 针对你的问题,是 direct 内存不足造成的,在不改变总内存大小的情况下,可以调大 > ‘taskmanager.memory.task.off-heap.size’ ,详见[2]。 > > > 关于隔离,Flink 中一个 TM 上的多个 slot 是跑在同一个进程中的,由于 JVM 自身的特点,进程内不同线程的内存是没有隔离的。Flink > > 仅对托管内存(managed memory)[3] 进行了隔离,这部分内存是由 Flink 负责管理申请、分配、释放的,不依赖于 JVM > > 的垃圾回收机制。托管内存目前仅用于 RocksDBStateBackend 和部分 Batch 算子,与你现在遇到的 direct oom 的问题无关。 > > Thank you~ > > Xintong Song > > > [1] > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_detail.html > [2] > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_trouble.html#outofmemoryerror-direct-buffer-memory > [3] > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_setup.html#%E6%89%98%E7%AE%A1%E5%86%85%E5%AD%98 > > > On Mon, Apr 27, 2020 at 10:31 AM 蒋佳成(Jiacheng Jiang) < > [hidden email]> > wrote: > > > hi > > > > > > &nbsp; &nbsp;我有个测试的单机的standalone > > > flink,平时跑几个测试job,tm内存设置了8g。最近升级了flink1.10,只设置了taskmanager.memory.flink.size为10g。但是启了一个数据量最大的job后,就无法再启动第二个job了,报内存不够:java.lang.OutOfMemoryError: > > Direct buffer memory。这是1个job就基本把所有的Direct > > > Memory占完了吗?如果是这样的话,flink1.10还适合跑standalone cluster吗?slot没有隔离这个内存吗? > > > 在官网讲解slot的地方有这么一句话:A TaskManager with three slots, for example, will > > > dedicate 1/3 of its managed memory to each slot.&nbsp;这里的its managed > > memory指的是taskmanager.memory.managed.size产生指定的内存吗? > > > > > > best&nbsp; > > Jungle |
hi Xintong
我还有一个问题,flink1.10在启动的时候会设置-Xmx,-Xms,-XX:MaxDirectMomerySize,-XX:MaxMetaspaceSize,官网也给出了这些设置的计算公式,但是并没有看见managed memory在哪里,managed memory似乎不属于jvm的堆,堆外和metaspace。那么managed memory属于哪块内存呢?为什么没有设置相应的jvm参数呢? ------------------ 原始邮件 ------------------ 发件人: "Xintong Song"<[hidden email]>; 发送时间: 2020年4月27日(星期一) 晚上6:56 收件人: "user-zh"<[hidden email]>; 主题: Re: flink 1.10内存设置 Framework Off-heap 和 Task Off-Heap 之间是没有隔离的。Network 可以认为和前面两者是有隔离的,会在初始化的时候申请一个固定大小的 buffer pool,整个运行过程中的内存占用是一个常量。 Thank you~ Xintong Song On Mon, Apr 27, 2020 at 6:14 PM 蒋佳成(Jiacheng Jiang) <[hidden email]> wrote: > Thank&nbsp;you&nbsp;Xintong.我还有一个问题官网上: > -XX:MaxDirectMemorySizeFramework + Task Off-Heap + Network Memory > MaxDirectMemorySize=Framework&nbsp;Off-Heap&nbsp;+ Task Off-Heap + Network > Memory。假如MaxDirectMemorySize=10,那么10=1+1+8和10=1+8+1,这2种情况有什么不一样吗?我的意思是这3个堆外内存有隔离吗?我之前没有设置task > off-heap,但是还能启一个job,感觉没有隔离。 > > > > ------------------&nbsp;原始邮件&nbsp;------------------ > 发件人: "Xintong Song"<[hidden email]&gt;; > 发送时间: 2020年4月27日(星期一) 中午12:06 > 收件人: "user-zh"<[hidden email]&gt;; > 主题: Re: flink 1.10内存设置 > > > > 你好, > > > Flink&nbsp;1.10&nbsp;对不同的内存类型进行了更精细的控制,明确了总内存中每种类型、用途的内存的大小。举个例子,如果简单考虑&nbsp;TM&nbsp;中有&nbsp;heap, > > direct,&nbsp;native&nbsp;三种内存类型,总内存大小是&nbsp;300mb。在之前的版本中,可能是&nbsp;heap&nbsp;固定占用100mb,剩下&nbsp;direct&nbsp;和 > > native&nbsp;共用&nbsp;200mb。理论上,direct/native&nbsp;可以分别占用&nbsp;200/0,&nbsp;100/100,&nbsp;0/200,只要总大小不超过&nbsp;200 > > 即可。但是一旦出现超用,我们很难判断是&nbsp;direct&nbsp;还是&nbsp;native&nbsp;内存造成的。在&nbsp;Flink&nbsp;1.10&nbsp;里,对&nbsp;direct/native > 分别用多少也做了明确的划分,这样一旦出现内存不足,就能够知道是哪部分造成的。上述描述是对内存模型做了简化,实际&nbsp;Flink > 考虑的内存类型不只三种,具体可以参考相关文档[1]。 > > 针对你的问题,是&nbsp;direct&nbsp;内存不足造成的,在不改变总内存大小的情况下,可以调大 > ‘taskmanager.memory.task.off-heap.size’&nbsp;,详见[2]。 > > > 关于隔离,Flink&nbsp;中一个&nbsp;TM&nbsp;上的多个&nbsp;slot&nbsp;是跑在同一个进程中的,由于&nbsp;JVM&nbsp;自身的特点,进程内不同线程的内存是没有隔离的。Flink > > 仅对托管内存(managed&nbsp;memory)[3]&nbsp;进行了隔离,这部分内存是由&nbsp;Flink&nbsp;负责管理申请、分配、释放的,不依赖于&nbsp;JVM > > 的垃圾回收机制。托管内存目前仅用于&nbsp;RocksDBStateBackend&nbsp;和部分&nbsp;Batch&nbsp;算子,与你现在遇到的&nbsp;direct&nbsp;oom&nbsp;的问题无关。 > > Thank&nbsp;you~ > > Xintong&nbsp;Song > > > [1] > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_detail.html > [2] > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_trouble.html#outofmemoryerror-direct-buffer-memory > [3] > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_setup.html#%E6%89%98%E7%AE%A1%E5%86%85%E5%AD%98 > > > On&nbsp;Mon,&nbsp;Apr&nbsp;27,&nbsp;2020&nbsp;at&nbsp;10:31&nbsp;AM&nbsp;蒋佳成(Jiacheng&nbsp;Jiang)&nbsp;< > [hidden email]&gt; > wrote: > > &gt;&nbsp;hi > &gt; > &gt; > &gt;&nbsp;&amp;nbsp;&nbsp;&amp;nbsp;我有个测试的单机的standalone > > &gt;&nbsp;flink,平时跑几个测试job,tm内存设置了8g。最近升级了flink1.10,只设置了taskmanager.memory.flink.size为10g。但是启了一个数据量最大的job后,就无法再启动第二个job了,报内存不够:java.lang.OutOfMemoryError: > &gt;&nbsp;Direct&nbsp;buffer&nbsp;memory。这是1个job就基本把所有的Direct > > &gt;&nbsp;Memory占完了吗?如果是这样的话,flink1.10还适合跑standalone&nbsp;cluster吗?slot没有隔离这个内存吗? > > &gt;&nbsp;在官网讲解slot的地方有这么一句话:A&nbsp;TaskManager&nbsp;with&nbsp;three&nbsp;slots,&nbsp;for&nbsp;example,&nbsp;will > > &gt;&nbsp;dedicate&nbsp;1/3&nbsp;of&nbsp;its&nbsp;managed&nbsp;memory&nbsp;to&nbsp;each&nbsp;slot.&amp;nbsp;这里的its&nbsp;managed > &gt;&nbsp;memory指的是taskmanager.memory.managed.size产生指定的内存吗? > &gt; > &gt; > &gt;&nbsp;best&amp;nbsp; > &gt;&nbsp;Jungle |
Managed 用的是 native memory,是不受 JVM 管理的,因此不会体现在 JVM
的启动参数上。可以参考一下邮件列表里之前的讨论内容[1]。 Thank you~ Xintong Song [1] http://apache-flink.147419.n8.nabble.com/Flink-tt1869.html <http://apache-flink.147419.n8.nabble.com/Flink-tt1869.html#a1872> On Tue, Apr 28, 2020 at 9:32 AM 蒋佳成(Jiacheng Jiang) <[hidden email]> wrote: > hi Xintong > > 我还有一个问题,flink1.10在启动的时候会设置-Xmx,-Xms,-XX:MaxDirectMomerySize,-XX:MaxMetaspaceSize,官网也给出了这些设置的计算公式,但是并没有看见managed > memory在哪里,managed memory似乎不属于jvm的堆,堆外和metaspace。那么managed > memory属于哪块内存呢?为什么没有设置相应的jvm参数呢? > > > > > ------------------ 原始邮件 ------------------ > 发件人: "Xintong Song"<[hidden email]>; > 发送时间: 2020年4月27日(星期一) 晚上6:56 > 收件人: "user-zh"<[hidden email]>; > 主题: Re: flink 1.10内存设置 > > > > > Framework Off-heap 和 Task Off-Heap 之间是没有隔离的。Network > 可以认为和前面两者是有隔离的,会在初始化的时候申请一个固定大小的 buffer pool,整个运行过程中的内存占用是一个常量。 > > Thank you~ > > Xintong Song > > > > > On Mon, Apr 27, 2020 at 6:14 PM 蒋佳成(Jiacheng Jiang) < > [hidden email]> > wrote: > > > Thank&nbsp;you&nbsp;Xintong.我还有一个问题官网上: > > > -XX:MaxDirectMemorySizeFramework + Task Off-Heap + Network Memory > > > MaxDirectMemorySize=Framework&nbsp;Off-Heap&nbsp;+ Task Off-Heap + Network > > > Memory。假如MaxDirectMemorySize=10,那么10=1+1+8和10=1+8+1,这2种情况有什么不一样吗?我的意思是这3个堆外内存有隔离吗?我之前没有设置task > > off-heap,但是还能启一个job,感觉没有隔离。 > > > > > > > > ------------------&nbsp;原始邮件&nbsp;------------------ > > 发件人: "Xintong Song"<[hidden email] > &gt;; > > 发送时间: 2020年4月27日(星期一) 中午12:06 > > 收件人: "user-zh"<[hidden email]&gt;; > > 主题: Re: flink 1.10内存设置 > > > > > > > > 你好, > > > > > > > Flink&nbsp;1.10&nbsp;对不同的内存类型进行了更精细的控制,明确了总内存中每种类型、用途的内存的大小。举个例子,如果简单考虑&nbsp;TM&nbsp;中有&nbsp;heap, > > > > > direct,&nbsp;native&nbsp;三种内存类型,总内存大小是&nbsp;300mb。在之前的版本中,可能是&nbsp;heap&nbsp;固定占用100mb,剩下&nbsp;direct&nbsp;和 > > > > > native&nbsp;共用&nbsp;200mb。理论上,direct/native&nbsp;可以分别占用&nbsp;200/0,&nbsp;100/100,&nbsp;0/200,只要总大小不超过&nbsp;200 > > > > > 即可。但是一旦出现超用,我们很难判断是&nbsp;direct&nbsp;还是&nbsp;native&nbsp;内存造成的。在&nbsp;Flink&nbsp;1.10&nbsp;里,对&nbsp;direct/native > > > 分别用多少也做了明确的划分,这样一旦出现内存不足,就能够知道是哪部分造成的。上述描述是对内存模型做了简化,实际&nbsp;Flink > > 考虑的内存类型不只三种,具体可以参考相关文档[1]。 > > > > 针对你的问题,是&nbsp;direct&nbsp;内存不足造成的,在不改变总内存大小的情况下,可以调大 > > ‘taskmanager.memory.task.off-heap.size’&nbsp;,详见[2]。 > > > > > > > 关于隔离,Flink&nbsp;中一个&nbsp;TM&nbsp;上的多个&nbsp;slot&nbsp;是跑在同一个进程中的,由于&nbsp;JVM&nbsp;自身的特点,进程内不同线程的内存是没有隔离的。Flink > > > > > 仅对托管内存(managed&nbsp;memory)[3]&nbsp;进行了隔离,这部分内存是由&nbsp;Flink&nbsp;负责管理申请、分配、释放的,不依赖于&nbsp;JVM > > > > > 的垃圾回收机制。托管内存目前仅用于&nbsp;RocksDBStateBackend&nbsp;和部分&nbsp;Batch&nbsp;算子,与你现在遇到的&nbsp;direct&nbsp;oom&nbsp;的问题无关。 > > > > Thank&nbsp;you~ > > > > Xintong&nbsp;Song > > > > > > [1] > > > > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_detail.html > > [2] > > > > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_trouble.html#outofmemoryerror-direct-buffer-memory > > [3] > <https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_trouble.html#outofmemoryerror-direct-buffer-memory> [3]> > > > > > https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_setup.html#%E6%89%98%E7%AE%A1%E5%86%85%E5%AD%98 > > > <https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/ops/memory/mem_setup.html#%E6%89%98%E7%AE%A1%E5%86%85%E5%AD%98>> > ; > > > > > On&nbsp;Mon,&nbsp;Apr&nbsp;27,&nbsp;2020&nbsp;at&nbsp;10:31&nbsp;AM&nbsp;蒋佳成(Jiacheng&nbsp;Jiang)&nbsp;< > > [hidden email]&gt; > > wrote: > > > > &gt;&nbsp;hi > > &gt; > > &gt; > > > &gt;&nbsp;&amp;nbsp;&nbsp;&amp;nbsp;我有个测试的单机的standalone > > > > > &gt;&nbsp;flink,平时跑几个测试job,tm内存设置了8g。最近升级了flink1.10,只设置了taskmanager.memory.flink.size为10g。但是启了一个数据量最大的job后,就无法再启动第二个job了,报内存不够:java.lang.OutOfMemoryError: > > > &gt;&nbsp;Direct&nbsp;buffer&nbsp;memory。这是1个job就基本把所有的Direct > > > > > &gt;&nbsp;Memory占完了吗?如果是这样的话,flink1.10还适合跑standalone&nbsp;cluster吗?slot没有隔离这个内存吗? > > > > > &gt;&nbsp;在官网讲解slot的地方有这么一句话:A&nbsp;TaskManager&nbsp;with&nbsp;three&nbsp;slots,&nbsp;for&nbsp;example,&nbsp;will > > > > > &gt;&nbsp;dedicate&nbsp;1/3&nbsp;of&nbsp;its&nbsp;managed&nbsp;memory&nbsp;to&nbsp;each&nbsp;slot.&amp;nbsp;这里的its&nbsp;managed > > > &gt;&nbsp;memory指的是taskmanager.memory.managed.size产生指定的内存吗? > > &gt; > > &gt; > > &gt;&nbsp;best&amp;nbsp; > > &gt;&nbsp;Jungle |
Free forum by Nabble | Edit this page |