Hiveserver2阻塞原因排查

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hiveserver2阻塞原因排查相关的知识,希望对你有一定的参考价值。

参考技术A 在修改表location与默认的hdfs机器不一致导致hiveserver2阻塞

使用jstack排查发现如下信息、由日志输出328线程,后续执行查询会日志线程为209但不会输出sql,发现是waiting状态,看栈信息是在执行tryAcquireCompileLock方法,看到源码发现是未开启并行parseSql配置

记一次生产环境线程阻塞的排查

1、使用top命令查找出消耗最多的进程id

$ top      #进程
$ top -H   #线程

2、查看进程中具体线程的资源消耗情况

$ strace -p [线程ID]

3、将线程ID转成16进制

$ printf  "%x\n" [线程ID]

4、查找具体阻塞的代码中的方法

$ jstack [进程ID] |grep [转好的16进制] -A 30

5、其他的一些常用命令

$ htop   #top的升级版,一般需要安装,centos7安装如下
$ yum install epel-release -y
$ yum install htop -y

6、jstat和jmap(此仅限于了解,待做详细总结)

jstat -class [进程ID]  #查看加载了多少类以及对应的信息
jstat -compiler [进程ID] #查看编译的数量, 成功和失败的数量和类型
jstat -gc [进程ID] #查看垃圾回收的统计信息

通过jstat可以对jvm堆的内存进行统计分析,而jmap可以获取到更加详细的内容
如:内存使用情况的汇总、对内存溢出的定位与分析。
jmap -heap [进程ID] #heap内存的使用情况
jmap -histo [进程ID] | more #查看内存中对象数量及大小
jmap -histo:live [进程ID] | more #查看内存中对象活跃数量及大小
jmap -dump:format=b,file=/tmp/dump.dat [进程ID] #将内存使用情况dump到文件中
jhat -port [端口] dump.dat #通过jhat对dump文件进行分析

以上是关于Hiveserver2阻塞原因排查的主要内容,如果未能解决你的问题,请参考以下文章

记一次HiveServer2启动不起来问题

连接hiveserver2-Hive用户配置

shells/hiveserver2.sh

HiveServer2的架构

Hive 通过 Jdbc 连接 HiveServer2

Hive 通过 Jdbc 连接 HiveServer2