开发者社区> 问答> 正文

任务假死了怎么解决呢?

java.lang.OutOfMemoryError: unable to create newnative thread。是哪种内存溢出了?是Xmx不够还是MaxDirectMemorySize不够?*来自志愿者整理的FLINK邮件归档

展开
收起
又出bug了-- 2021-12-03 17:31:52 796 0
1 条回答
写回答
取消 提交回答
  • 看了你的描述,我大概知道问题在哪了。首先,我觉得你的启动配置可以优化下,你的配置 -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邮件归档

    2021-12-03 18:36:18
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载