首页 > 其他分享 >HiveServer2 文件描述符泄漏

HiveServer2 文件描述符泄漏

时间:2024-09-20 15:25:39浏览次数:9  
标签:泄漏 hive HiveServer2 描述符 session apache org operation hs2

 

现象

用户反馈 hs2 打开的文件描述符的数量一直在涨,但是当前 hs2 的连接只有个位数。

wecom-temp-86668-466aa580e0ca33aef0dd18c39de36447.png

 

排查过程

首先找到 hs2 进程持有了哪些文件描述符,通过 lsof 命令 lsof -p $pid ,看到 hs2 进程确实在 /data/emr/hive/tmp/operation_logs/ 目录下打开了大量描述符

在 jira 中找到一个类似 的 issue: [HIVE-10970] Investigate HIVE-10453: HS2 leaking open file descriptors when using UDFs - ASF JIRA (apache.org)

但是这个场景是由于 UDF 导致的 fd 泄漏,并且泄漏路径是在 hive.downloaded.resources.dir 路径下,跟 operation_logs 目录不一样.看上去不是同一个问题

排查源码 , 找到 operation log 有一个清理逻辑
org.apache.hive.service.cli.operation.Operation#cleanupOperationLog

猜测是在客户端 session 异常结束 的时候,这个方法没有被正常调用到或者清理逻辑有漏洞导致的

首先过一遍 session 关闭的逻辑,通过分析 beeline 客户端的火焰图,找到 session 关闭起始点
org.apache.hive.jdbc.HiveStatement#closeClientOperation
Pasted image 20230303195911.png

这里 client 发起了一个 thrift rpc 调用,然后在 hs2 thrift 找到 thrift server 对应的方法 org.apache.hive.service.cli.thrift.ThriftCLIService#CloseOperation
跟踪这个方法,最终会走到 org.apache.hive.service.cli.operation.SQLOperation#close
这里会调用 cleanupOperationLog 方法
Pasted image 20230303200607.png

那么确实是有可能由于客户端 session 异常退出,operation logs 没有被清理的可能的

接着查看 cleanupOperationLog 逻辑, 看这里是否有代码 bug ,于是在 idea 中使用 git 分支比较功能,发现 3.1 版本提交了一个修复

Pasted image 20230303193129.png

[HIVE-18820] Operation doesn't always clean up log4j for operation log - ASF JIRA (apache.org)

 

结论

  • 客户端 session 异常退出,导致 operation logs 没有被清理,跟 scratch dir 没有被清理场景类似
  • HIVE-18820 社区 bug 导致,可以考虑合入这个 patch

标签:泄漏,hive,HiveServer2,描述符,session,apache,org,operation,hs2
From: https://www.cnblogs.com/hdpdriver/p/18422577

相关文章

  • JavaScript高级——内存溢出和内存泄漏
    1、闭包的缺点与解决方法(1)缺点:函数执行完后,函数内的局部变量没有释放,占用内存时间会变长。 容易造成内存泄漏。(2)解决:能不用闭包就不用。 及时释放。2、内存溢出①一种程序运行出现的错误②当程序需要的内存超过了剩余的内存时,就会出现内存溢出的错误3、内存泄......
  • 深入理解Go并发编程:避免Goroutine泄漏与错误处理
    Go语言以其强大的并发模型和高效的协程(goroutine)而闻名。协程的轻量级和易用性使得并发编程变得更加简单。然而,如果不正确管理协程,可能会导致Goroutine泄漏,从而消耗系统资源,影响程序性能。本文将深入探讨如何避免Goroutine泄漏,并提供实用的代码示例和技巧,帮助您编写更加健壮......
  • 前端JavaScript面试重难点: 闭包+内存泄漏+垃圾回收机制
    前置知识!!!闭包是Javascript语言的一个重难点,也是它的特色,很多高级应用都要依靠闭包来实现。在各种专业文献上学习"闭包"的时候,就一个感觉–“抽象”!特别是学习内存泄漏的时候,没想明白为什么使用闭包的时候不及时清除函数中的元素会导致内存泄漏,直到我的......
  • USB协议详解第10讲(USB描述符-报告描述符)
    1.报告描述符的概念和作用开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构。首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送或者索取数据,也就是说USB主机发送一个请求,设备要根据硬件操作,向主机提交自己的状态变化,例......
  • 成立LDAR检测公司的条件和投资额度(扩项)-泄漏检测与修复CMA认证
    ​一、成立检验检测机构  1)独立法人:营业执照(经营范围包括检验检测机构服务的相关内容,不得有影响其检验检测活动公正性的经营项目,如:生产,销售等)2)内设机构:取得所在机构法人机构的授权,明确责任义务。法定代表人不担任最高管理者,法定代表人对最高管理者授权。二、场所  必......
  • go语言内存泄漏的场景分析
    go本身自带的GC是自动触发的不需要我们人为干预但是在某些场景下还是会存在内存泄漏的问题1循环引用如果存在两个或多个变量形成环式的相互引用那么go的GC就无法通过三原色的方式来完成对应变量的垃圾回收这会是导致内存泄漏的场景之一处理方法:这种场景多发生......
  • opencv实战项目二十三:基于BEBLID描述符的特征点匹配实现表盘校正
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、特征点匹配介绍二、特征点检测三、特征描述符计算四,描述符的匹配筛选五,根据匹配结果映射图片六,整体代码:七,效果:前言在数字化时代,图像处理技术的应用日益广泛,其中表盘校正作为一项重要......
  • 【项目实战】NIO 与 直接内存 (Direct Memory),由JVM直接管理,而不是通过垃圾回收器来管
    一、技术概览1.1定义直接内存,DirectMemory。直接内存,是指位于Java堆外的一块内存区域。直接内存,由JVM直接管理,而不是通过垃圾回收器来管理。直接内存,可以通过Java的ByteBuffer.allocateDirect()方法创建。直接内存,可以提高数据传输效率,特别是当数据需要频繁地在网络......
  • 防泄密系统哪个好用?2024四款数据防泄漏系统精选(网友直呼:挖到宝了!)
    “救命!防泄密系统哪个好用啊?”您是否正在为找不到一款既能有效保护数据又易于部署的软件而忧心忡忡呢?别担心,本文将为您精选四款2024年备受好评的数据防泄漏系统,让您轻松找到“宝藏”软件。一、域智盾系统介绍:域智盾软件以其强大的加密算法和行为监控功能著称,能够实时监测数......
  • C# WebSocket Fleck 内存泄漏
    最近在维护公司旧项目,内存泄漏严重,找了行业内大佬帮忙分析Dump文件(windbg我不擅长),大佬指出问题在于Fleck,这里记录一下。整理一下问题:1.大佬指出System.Threading.Tasks.ContinuationTaskFromTask和System.ObjectDisposedException有71完个对象。2.System.ObjectDisposedE......