java.lang.OutOfMemoryError: unable to create newnative thread。是哪种内存溢出了?是Xmx不够还是MaxDirectMemorySize不够?*来自志愿者整理的FLINK邮件归档
看了你的描述,我大概知道问题在哪了。首先,我觉得你的启动配置可以优化下,你的配置 -p 200 -ys 5,
也就是说,你的 Flink 任务默认并发是 200,然后每个 TaskManger 有五个槽。
每个槽的内存是一个 TaskManager 的内存的 1 / 5。
如果默认的 TaskManager 内存是1 G 话,相当于你一个槽里面只有 200 M,这样给 JVM 堆栈真正的内存就会更少。
从你的日志中,也出现了 java.lang.OutOfMemoryError: unable to create newnative thread。因为在 Flink 中,有很多地方需要创建 Thread,
一个 Thread 在 JVM,需要有一定的栈空间,默认 1M , 现在应该是由于槽的内存太小,导致线程栈没有内存分配。
Flink 任务 Task 容错恢复时,需要将状态从 Running -> Canceling -> Canceled,最底层需要启动一个后台线程去 cancel.
但是现在由于不能够创建线程,所以会有 Task 存存在 hang 住(假死)情况,也就是一直显示 Canceling.
个人建议将参数改一下: -p 64 -ytm 2048,之后在观察一下*来自志愿者整理的FLINK邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。