运维态高效处理线程泄漏
写在前面:线程泄漏,你想定位多快
周五晚上八点,版本即将发布。测试同学发来一条消息——线上用户反馈应用卡顿严重,伴随偶现闪退,怀疑是资源问题。
打开APMS平台查看数据,线程数量曲线持续攀升,从正常的几十条涨到上千条,且没有回落迹象。泄漏的线程是谁创建的?为什么没有退出?根因是什么?
如果靠翻日志、加日志、再复现,可能一轮排查下来,发布时间窗口已经错过。偶现的线程泄漏甚至可能在实验室环境里永远无法稳定复现。
这些问题的共同点在于——答案不在表面数据里,而在证据链、现场数据和创建线程调用栈深处。现场没留住,开发者只能在复现、加日志、再复现的循环中反复横跳。
APMS平台和Operation Analyzer平台,正是为补上这块拼图而来。它将线程泄漏分析从看得见趋势升级到看得见根因。本文就来聊聊,如何用这两个平台高效处理线程资源泄漏。
线程泄漏是什么
线程泄漏是指程序在运行过程中动态创建了线程,但未正确释放或终止这些线程,导致线程数量持续增长的现象。例如:某应用用户每次刷新页面都创建一个后台线程处理数据,但页面关闭时未终止该线程,每个线程会占用一个线程栈,线程泄漏会导致内存泄漏。如果线程持续占用CPU,还会使CPU资源耗尽,最终导致应用前台闪退或系统查杀后台应用。
分析流程:五步定位线程泄漏根因
排查流程如下图所示:

运维态处理线程泄漏,遵循以下五步排查流程:
1. 故障预警配置:在APMS平台(APMS是提供给开发者的全链路运维平台,核心能力包括多维监控、智能告警、AI诊断、质量报告。帮助开发者高效保障应用线上稳定性。)配置线程泄漏监控告警规则,设置监控时段、频率和触发条件。线程泄漏对应的指标类型为THREAD_LEAK。
2. 问题发现与筛选:通过故障预警或主动分析页面,筛选THREAD_LEAK类型的泄漏问题,查看线程泄漏趋势与Top问题列表。
3. 关键信息提取:分析故障模块、发生次数、影响设备数等关键指标,结合业务实际情况找出高优先级问题。
4. 根因定位:通过证据链、现场数据和创建线程调用栈,深入分析泄漏原因。
5. 修复与验证:根据修复建议优化代码,发布新版本后验证修复效果,形成闭环。
APMS平台线程泄漏分析实战
故障预警
在APMS平台新建告警规则时,根据实际业务情况选择合适的监控时段、监控频率、告警触发条件及其他告警指标。线程泄漏对应的指标类型为THREAD_LEAK。创建告警后,后台开始收集数据。当泄漏达到设置的告警阈值后,触发故障预警通知。
故障预警配置界面如图1所示:
图1

问题查看与聚类
通过故障告警指引,在资源泄漏页签下选择泄漏类型为THREAD_LEAK,过滤出应用的线程泄漏问题。线程泄漏聚类规则可参考官方文档中的线程泄漏聚类规则说明。
根因定位与分析
故障详情页面提供以下分析工具:
• 证据链:汇总线程泄漏详情,包含Top 10泄漏线程、Top 10线程故障模块信息和Profiler原始调用栈。依据泄漏线程、堆栈及优化建议,定位并修复问题代码。
证据链详情如图2所示:
图2

• 现场数据:展示线程泄漏时的调用栈,按同名线程数量大小排列。疑似泄漏点为数量最多的线程中最后调用的应用栈帧或非公共系统栈帧。上传符号表完成堆栈还原后,可根据疑似泄漏点定位到具体代码行。
现场数据详情如图3所示:
图3

• 创建线程调用栈:查看创建线程的详细调用栈,通过分析泄漏线程创建时的调用栈信息并关联业务代码,有效锁定导致泄漏的具体线程及其创建逻辑。
创建线程调用栈信息详情如图4所示:
图4

下钻分析
从宏观汇总数据逐层深入至明细数据,平台根据故障特征ID进行聚类,展示应用版本TOP5、系统版本TOP5、设备型号TOP5三个维度的信息,帮助缩小版本排查范围,明确问题在各个版本的趋势。
下钻分析界面如图5所示:
图5

修复建议验证与闭环
故障详情页面提供修复建议。开发者需要根据建议优化代码。应用发布后,更新平台告警规则,持续关注新版本的线程泄漏数据,对比修复前后的问题发生率,确认修复是否有效。
基于Operation Analyzer平台分析
Operation Analyzer是DevEco Studio的插件,数据和APMS平台一致,支持在IDE内使用相同方式分析运维态的泄漏问题。
平台入口
打开DevEco Studio后,在Tool Windows栏的Operation Analyzer进入平台,根据包名选择应用,再单击资源泄漏(Resource Leak)即可查看该类故障相关数据。
Operation Analyzer平台界面如图6所示:
图6


问题分析
开发者可自定义筛选条件筛选需要查看的问题。问题详情页与APMS平台功能相同,可查看证据链、现场数据、创建线程调用栈进行分析。如果修复建议不能支撑解决问题,可进一步查看现场数据、线程调用栈profiler进行具体分析。
Operation Analyzer证据链界面如图7所示:
图7

现场数据界面如图8所示:
图8

创建线程调用栈界面如图9所示:
图9

关联离线符号表
Operation Analyzer平台提供堆栈还原能力,通过上传符号表(.so/.map/.json文件)完成堆栈还原,辅助分析问题。已有符号表则不需要上传。
关联离线符号表界面如图10所示:
图10

关联代码
堆栈还原后,平台可将故障处与项目代码相关联,单击故障处可跳转到对应源码中,辅助开发者更高效地定位问题。
关联代码界面如图11所示:
图11

问题修复
Operation Analyzer平台会给出故障分析与修复建议,开发者可根据修复建议修复问题代码。
问题修复界面如图12所示:
图12

🔗 官网开发者学堂视频:https://developer.huawei.com/consumer/cn/training/result?type2List=201783644516849879&orderBy=1&courseType=5

🔗 社区DFX专题文章: https://developer.huawei.com/consumer/cn/forum/subject/2101218731402391001


【扫码加入 HarmonyOS DFX 技术交流群】
本文由 @华为开发者联盟 授权发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Unsplash,基于CC0协议
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务
- 目前还没评论,等你发挥!

起点课堂会员权益




