当前位置: 首页 > news >正文

flink常见问题(持续更新)

本文记录我在使用flink过程中遇到的部分问题,后续遇到别的问题也在这里更新,文章长期更新。

1.内存问题导致被yarn/k8s杀掉

这种问题基本都是因为物理内存或者虚拟内存超过被yarn杀掉,可以看到如下日志:

虚拟内存超标

如果是虚拟内存超过了需要改yarn配置即可,比如设置yarn.nodemanager.vmem-check-enabled为false关闭虚拟内存检测或者增加yarn.nodemanager.vmem-pmem-ratio的值,默认为2.1,比如我上图中12*2.1=25.2G。

物理内存超标

物理内存超标首先需要检查自己代码是否会有内存泄漏。此处我是用的flink-sql,并未自己写代码,所以排除上述情况。

我产生上述情况的taskmanager内存参数如下:

-Djobmanager.memory.process.size=2g \
-Dtaskmanager.numberOfTaskSlots=2 \
-Dtaskmanager.memory.process.size=12g \
-Dtaskmanager.memory.managed.fraction=0.5 \
-Dtaskmanager.memory.jvm-overhead.fraction=0.4 \
-Dstate.backend="rocksdb" \
-Dstate.backend.incremental="true" \

我用了rocksdb做状态后端,rocksdb做状态后端会直接用物理内存,且内存不是完全按照flink分配的managed.memory大小来使用,所以需要增加overhead的内存,我这里给了0.4的比例,但是真实起作用的overhead只有1gb,具体原因参见我的另一篇博文:flink-taskmanager内存计算 。

查看内存分配详情,通过flink-ui界面找到container的dataport端口

执行如下命令: 

netstat -anop | grep xxxx
top -p xxxx

例如:

可以看到设置12g,已经使用了11.6g,使用的内存还是挺高的。

通过pmap -x 394 | sort -r -n -k3 > /data/tmp/394-pmap-sorted.txt 查看内存分配信息,结果如下图:

可以看到我这里有很多接近64M的内存,由于我这里是flink读hudi数据再写hudi,hudi数据存储在hdfs上,所以就想到了linux中Glibc Thread Arena问题,这个问题会导致申请很多大约64M的内存,解决这个问题需要同时修改yarn配置和flink程序配置。

  • yarn配置修改yarn.nodemanager.env-whitelist配置项目,在里边新增MALLOC_ARENA_MAX
  • flink程序配置添加如下配置:-Dcontainerized.taskmanager.env.MALLOC_ARENA_MAX="1"

修改以后重新提交程序运行,继续看pmap结果:

已经没有大片的64M左右的内存了,所以上述改动生效。

除了上述解决办法还有个简单的解决办法,就是再次增大overhead。比如我增加如下参数 -Dtaskmanager.memory.jvm-overhead.max="4gb" 再结合-Dtaskmanager.memory.jvm-overhead.fraction=0.4设置该参数将原来1g的overhead设置为4g,此时尝试再运行程序,也没有再被kill了,程序内存高峰值8.8g,离进程的最大12g还有比较大的buffer空间,至此问题解决。

相关文章:

  • ⌈Linux_ 感受系统美学⌋ 剖释“Linux下一切皆文件” | 底层级操作增进Linux内功
  • 【Java知识点大全】
  • 【华为机试真题 Python实现】矩阵扩散
  • 建立对单片机/嵌入式启动、运行的整体认知
  • 猿创征文 | 什么是PHP,PHP如何创建数据库
  • Kubernetes — StatefulSet 管理与使用
  • 想学习网络安全一定要学习web
  • 【leetcode刷题】数组篇
  • 基于VUE+Echarts大屏数据展示150套 (集合)
  • 【深度学习100例】—— 基于pytorch使用LSTM进行文本情感分析 | 第7例
  • 【基础巩固】详细总结对数组的理解
  • ⌈Linux_ 感受系统美学⌋ 剖释“Linux下一切皆文件” ,底层级操作增进Linux内功
  • 哪些是模糊用语-《软件方法》自测题解析020
  • 【设计模式】-创建型模式-第2章第5讲-【对象池模式】
  • 125款浪漫七夕表白网站源码【建议收藏】HTML+CSS+JavaScript
  • 时间复杂度分析经典问题——最大子序列和
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【React系列】如何构建React应用程序
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 2017前端实习生面试总结
  • conda常用的命令
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Docker 笔记(2):Dockerfile
  • Druid 在有赞的实践
  • HTML5新特性总结
  • JavaScript设计模式与开发实践系列之策略模式
  • JS学习笔记——闭包
  • Laravel Mix运行时关于es2015报错解决方案
  • node学习系列之简单文件上传
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • windows下使用nginx调试简介
  • XML已死 ?
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 关于Java中分层中遇到的一些问题
  • 关于List、List?、ListObject的区别
  • 聊聊flink的TableFactory
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ( 10 )MySQL中的外键
  • (¥1011)-(一千零一拾一元整)输出
  • (11)MATLAB PCA+SVM 人脸识别
  • (23)Linux的软硬连接
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (剑指Offer)面试题34:丑数
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • .net 7 上传文件踩坑
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Core中Emit的使用
  • .NET 反射 Reflect
  • .Net 垃圾回收机制原理(二)