当前hive版本是1.1.0-cdh5.12.1
在监控页面查看hiveserver2的线程数如下
这说明hiveserver2的线程可能存在没有关闭的情况,在hiveserver2使用jstack去查看线程总数如下
我们看到hiveserver2竟然有15145个线程存活着,但是metastore只有542,hiveserver2的线程数肯定不正常,那么是什么导致的呢?
我们使用arthas的thread去监控各种线程的状态如下
发现为WAITING的特别多,线程名是Get-Input-Path-xxx,根据这个线程名去搜索这个线程是干什么的,发现这个是使用多线程去扫描目录下的文件信息的,这个多线程多少是由参数hive.exec.input.listing.max.threads和目录数的最小值决定
去查找这个关键字,发现了HIVE-16949的patch,发现这个patch刚好和我们这个匹配,于是打上这个patch
更新一晚之后观察如下,我们看到线程数很低了,也就是线程已经正常关闭了