一.场景:
在实时任务 注册和激活相关的任务 GamePublishKpi 中,程序运行一段时间,就会报内存溢出
二.分析方法
- ps -ef | grep GamePublishKpi 找出运行的程序
- jmap -heap 27075(进程号) 查看该程序的运行过程中内存的使用情况
该命令对应的参数解读: http://blog.youkuaiyun.com/yrpting/article/details/52859721
本次遇到的问题就是 Old Generation 内存持续增长,也就是说一些内存没有释放
三.分析
代码看了很多遍 该释放的内存都释放了,应该是spark内部框架的问题,查看资料了解到 spark-ui 默认显示1000个jobs的运行情况,没有达到1000个jobs时,会缓存运行状况在内存中,内存随着job数量增加而增加,所以可以通过参数修改spark-ui的 显示个数
spark-submit \
--masteryarn-client \
--confspark.ui.retainedJobs=12 \
--confspark.sql.ui.retainedExecutions=30 \
--executor-memory 2G\
--classcom.xiaopeng.bi.gamepublish.GamePublishKpi \
/home/hduser/projs/xiaopeng_bi_kpi_regi.jar600
参考资料: