通过 GC工具分析 HiveServer2停顿时间过长问题

1.现象

线上环境 HiveServer2报:在前 5分钟内暂停所花的平均时间过长

在这里插入图片描述

hs2角色日志如下:

在这里插入图片描述

2.分析

看到上面的报错和日志,第一个直觉就是 hs2 GC出问题了,于是使用 jstat命令进行分析:

jstat -gcutil 82775 5000 5

这里先简单介绍一下 jstat这条命令:

​ -gcutil,打印 gc统计信息

​ 82775,java进程ID

​ 5000,5000ms

​ 5,5次

所以这条命令的含义为:每间隔 5000ms打印一次 进程 82775的 gc统计信息,一共打印 5次

接下来分析这个 hs2的 gc统计信息

在这里插入图片描述

从上图可以很明显得看出 ygc的次数非常多,5s内甚至能产生 3次 ygc,而且根据 ygct看到 gc时间确实很长。

另外,可以看到 eden区内存占用率几乎随时都是 99%的状态。

综上,问题出在 新生代含有大量对象,且无法及时释放,进而导致频繁 ygc

于是带着上面的结论再次认真查看角色日志

在这里插入图片描述

日志中确实有别的异常,从 jetty.server可以联想到应该是 hs2的 webui出问题了,进而查看如下:

在这里插入图片描述

可以看到很多个 tcp连接均处于 close_wait状态,这部分资源自然无法释放,那么到此为止初步判断导致频繁 gc的原因就是这些没有及时释放掉的 tcp连接了。

3.解决

带着分析的结论去查阅相关资料,发现有可能是这个 jetty server线程数不足导致请求没法及时处理的。

补充:hs2自带的 webui服务即使用的 jetty。

因此,修改 hive.server2.webui.max.threads=100,其默认值为 50。

然后重启整个 hive服务,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值