基本上是这样的,关于内存释放的部分稍微有点不准确。

Heap 空间可以认为是 JVM 向 OS 申请好的一段连续内存。Java 对象 new 的时候是从这段 JVM 已经申请的内存中划分出一部分,GC
时对象 finalize 也是将内存还给 JVM,并不会真的像 OS 去释放内存。

Direct/Native 内存则是直接向 OS 申请的内存。持有该内存的对象在 finalize 的时候必须向 OS 释放这段内存,否则 GC
是无法自动释放该内存的,就会造成泄漏。
Direct 内存相比 Native 内存的区别主要有两点,一是申请时 JVM 会检查 MaxDirectMemorySize,二是 JVM 会保证
DirectByteBuffer 被销毁的时候会向 OS 去释放这段内存。
Native 内存需要我们自己保证内存的释放,在 Flink 中由于申请到的 Native 内存也是封装在 DirectByteBuffer
里的,所以这部分内存的释放是通过给 DirectByteBuffer 设置 cleaner 实现的。详见
`MemorySegmentFactory#allocateOffHeapUnsafeMemory`

Thank you~

Xintong Song



On Fri, May 8, 2020 at 10:48 AM 蒋佳成(Jiacheng Jiang) <920334...@qq.com>
wrote:

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

回复