Flink运行过程中出现java.lang.OutOfMemoryError: Metaspace异常的原因及解决方案

熟悉java的人都知道java.lang.OutOfMemoryError: Metaspace异常产生的原因是“元数据区”内存溢出了,从JDK8开始,HotSpot JVM废弃了永久区PermGen space,采用Metaspace保存class名称、字段、方法、字节码,、常量池、JIT优化代码等信息。所以出现这个异常的原因一般是加载到内存中的类太多了。

通过 ps -ef|grep flink 可以查看flink进程的Metaspace配置,如图:

在这里插入图片描述
还可以通过 jinfo -flag MetaspaceSize pidjinfo -flag MaxMetaspaceSize pid 查看Metaspace大小,MetaspaceSize是初始化大小,MaxMetaspaceSize是最大占用的大小,返回值的单位是字节。

那么Flink怎么配置Metaspace大小呢?可以在flink-conf.yaml中增加配置项taskmanager.memory.jvm-metaspace.size,例如 taskmanager.memory.jvm-metaspace.size: 256m 就是将Metaspace的最大值设置为256MB。

另外,下图展示了Flink配置项对应的jvm内存配置:

Flink运行过程中出现java.lang.OutOfMemoryError: Metaspace异常的原因及解决方案_第1张图片
最后需要说明的是:上述内容针对Flink 1.10.0版本是适用的,如果配置不起作用,那应该是版本之间存在差异,请参考Flink官网。

你可能感兴趣的:(大数据,java,jvm,大数据,flink)