永久函数内存泄露问题分析报告
1基本信息[Basic Information]
生产环境:是
集群规模:52+3台物理机,每台128G内存;CPU:2*16C;SATA磁盘,2T*12
- hadoop社区版本:2.7.2
- 商业版本:FusionInsight_HD_V100R002C60U10
- MetaStore:高斯数据库(Postgresql)
2问题描述[Problem Description]
在生产环境中发现hiveserver在去掉临时函数,使用永久函数后,hiveserver的内存依然在增加,最终导致full gc
3问题分析[Problem Analysis]
1.更换成永久函数后,发现还是有内存泄露,经过分析,永久函数每次在新建会话中使用的时候,都重新内部执行了add jar的操作,并不是之前认为的每次hiveserver启动创建一次,大概这样做的目的使用户函数在更新了jar包后,可以即时生效,而不用重启hiveserver。
2.将泄漏代码改完后,临时函数,永久函数都持续运行,内存在增加后,后续会被回收,不再泄漏。
4根本原因[Root Cause]
根本原因是永久函数内存泄露导致频繁Full GC,从而导致JVM响应慢。
5解决措施[Corrective Action]
5.1临时解决措施[Workaround]
1.使用永久函数会降低内存泄漏的速度
2.需要定期手动滚动重启内存快满的hiveserver
5.2最终解决措施[Solution]
在U10SPC003中解决这个bug
DTS2016112412875
6规避措施[Preventive Action]
参见5.1章节。