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