Hiveserver FullGC一直处于恢复中问题分析

举报
Nature_L 发表于 2021/07/05 16:30:32 2021/07/05
【摘要】 问题描述:有hiveserver反复处于恢复中,分析该hiveserver日志发现频繁的FullGC,hiveserver的GC配置为64GB。问题分析:1.      观察hiveserver监控,发现在较短时间内hiveserver内存使用率快速升高。根据内存骤升初步推测为业务导致。2.      取得hiveserver故障节点对应的内存dump日志 及 hiveserver运行日志进...

问题描述:

有hiveserver反复处于恢复中,分析该hiveserver日志发现频繁的FullGChiveserverGC配置为64GB。

问题分析:

1.      观察hiveserver监控,发现在较短时间内hiveserver内存使用率快速升高。根据内存骤升初步推测为业务导致。


2.      取得hiveserver故障节点对应的内存dump日志  hiveserver运行日志进行分析。

3.      根据传回的63g dump文件分析可见,存在线程Thread-3373220占用内存60g+,推测该线程持有内存过大导致出现FullGc.

4.      在日志中找到该线程对应的线索,发现具体业务sql:

create table tb_sub_foreign_usernum_step7 as select t2.usernum, t2.imsi, t2.homearea, t1.url, t1.host, t1.title, from_unixtime(t1.capture_time) as capture_time, t3.type from (select msisdn, url, host, title, capture_time from default.tb_http where cp>='2020091700' and cp<'2020100100') t1 join tb_sub_foreign_usernum t2 on t1.msisdn=t2.usernum join tb_foreign_illegal_url t3 where t1.url like concat(t3.url, '%');     

5.      继续分析dump日志,发现HdfsLocatedFileStatus对象有600w加数量,查看单个该文件看约占10k大小, 总共占用内存60g+,断定是由该对象耗尽了内存。

6.      根据日志及dump分析的堆栈,发现此处为获取数据文件路径的逻辑,查看sql对应的2020091700分区目录,发现该1小时分区下即存在6w+文件,sql查询91793115天即360小时,360个分区的文件。

每个分区下可能存在数万个文件,导致文件总数超过600w+,进而内存耗尽出现FullGC

     

 
解决方案:

1.可缩小表查询的范围,减少内存中加载的数据量。

2.MRS最新版本Hadoop已经做了优化,HdfsLocatedFileStatus一个对象从10k已经优化到2k.

PS:如果有FullGC问题,怀疑是业务导致的(一般内存会短时间内上升),可通过监控获取到内存骤升的时间,往前推一段时间获取执行的sql,在这些sql中排查看有没有分区文件特别多的情况。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。