大家好: 我有个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。*来自志愿者整理的flink邮件归档
你的理解没有错。cutoff 包含的既有 direct 内存也有 native 内存,native 内存是不受 maxDirectMemorySize 控制的。所以严格来说,是存在超用的可能性的。
我们无法准确知道 cutoff 内存中 direct/native 分别是多少,因此只能根据 direct 内存可能使用的最大值(即假设 cutoff 全部为 direct 内存)去设置 maxDirectMemorySize。如果设置的 maxDirectMemorySize 比实际需要的 direct 内存小,是一定会触发 OOM 的;反之如果设置的 maxDirectMemorySize 比实际需要的 direct 内存大,却不一定会用满 maxDirectMemorySize 指定的内存大小,因为即使没有达到上限,不用的 direct 内存还是会随着 GC 被释放掉。*来自志愿者整理的flink
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。