栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Flink集群元空间内存溢出报错 java.lang.OutOfMemoryError: Metaspace

Flink集群元空间内存溢出报错 java.lang.OutOfMemoryError: Metaspace

Flink集群元空间内存溢出报错 java.lang.OutOfMemoryError: metaspace

目录
  • Flink集群元空间内存溢出报错 java.lang.OutOfMemoryError: metaspace
    • 一、环境以及背景故事说明
    • 二、详细报错情况
    • 三、解决办法
    • 四、内存模型分析
    • 五、最后

一、环境以及背景故事说明

Flink standalone 分布式集群
Version: 1.13.1

对于flink集群来说,我实在是一个新手中的新手,下面如有说的不对的不恰当的地方还请大家指出,不胜感激!
在工作中发现flink集群的其中一个节点挂掉了,然后从日志中 查看到了报错信息;通过报错信息了解到,是因为我们的taskmanager的元空间内存不够了

二、详细报错情况

具体报错情况

ERROR org.apache.flink.runtime.taskexecutor.TaskManagerRunner      
[] - Fatal error occurred while executing the TaskManager. Shutting it down...
java.lang.OutOfMemoryError: metaspace. The metaspace out-of-memory error has occurred.
This can mean two things: either the job requires a larger size of JVM metaspace to load classes or there is a class loading leak. 
In the first case 'taskmanager.memory.jvm-metaspace.size' configuration option should be increased. 
If the error persists (usually in cluster after several job (re-)submissions) then there 
is probably a class loading leak in user code or some of its dependencies which has to be investigated and fixed. 
The task executor has to be shutdown...

emmm… 百度翻译一下

我们通过报错信息得知,我们可以选择增加元空间内存来解决该报错,并且告诉我们应增加taskmanager.memory.jvm-metaspace.size 配置来实现。实在是太贴心了!

三、解决办法

在Apache Flink官网查看一下 taskmanager.memory.jvm-metaspace.size 描述

该配置默认为256MB,我们也可以通过flink web界面来查看对应节点对应内存大小以及使用情况,然后结合我们服务器配置以及任务量来分析我们应该配置多少内存合适。

其中要先注意在配置文件中有一个 taskmanager.memory.process.size 参数,该参数是taskmanager总内存数,也就是 taskmanager.memory.process.size 包含 taskmanager.memory.jvm-metaspace.size
这个我们下面内存分析中再讨论

然后我们进入到对应目录下,通过该参数增加对应内存。

# 进入到该目录下
cd /flink/conf
#修改该配置文件
vim flink-conf.yaml
# 假如设置为500MB
taskmanager.memory.jvm-metaspace.size: 500m

当我们修改完配置后,要注意是否需要同步到其它节点,以及需要重启flink集群后才能生效!
如果是生产环境的话,一定要慎重。

四、内存模型分析


在flink-conf.yaml配置文件中,Task Manager的内存模型,分为5大部分:堆内存、堆外内存、直接内存、metaSpace内存以及JVM Overhead内存。

简单的来说taskmanager.memory.process.size的值=JVM Heap+Off-Heap Memory+Direct Memory+JVM metaspace +JVM Overhead

其中当我们增加taskmanager.memory.process.size时,Task Heap、Managed Memory、Network也会自动随之增加。

但JVM metaspace需要我们自己通过参数来配置大小

五、最后

目前我也就知道这么多了,如有说的不对的地方还望大家指正。祝大家天天进步,越来越厉害!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467294.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号