案例
把长期运行后的崩溃追踪到句柄泄漏的案例
通过梳理观测点和增强日志,把以月为单位才出现的崩溃收窄到句柄泄漏调查的技术案例页面。
案例概要
针对一个只在连续运行约 1 个月后才突然崩溃的 Windows 应用程序,我们从梳理观测点入手,最终把调查收窄到以句柄泄漏为中心的案例。 关键不只在于原因本身,而在于决定了 应该先把哪些观测准备好。
症状
- 几天之内不会出现,只在长期运行后崩溃
- 仅凭异常的出现方式,难以判断是否是泄漏
- 只在现场发生,在开发机上需要压缩重现条件
约束
- 以月为单位等待重现并不现实
- 由于涉及相机重连和异常路径,只有正常路径的日志并不够
- 需要能够持续观测是哪种资源在增长
观测了什么
Handle Count、Private Bytes、Thread Count的 heartbeat- 会话开始、重连、结束的边界日志
create/open/register与close/dispose/unregister成对出现的生命周期日志
如何排查
首先没有直接去追“长期运行崩溃”本身,而是把重现压缩到重连和 timeout 相关的失败路径上。 结果判断出,比起内存泄漏,怀疑 句柄泄漏 更为合理,从而可以把观测集中到那里。
如何改善
- 增加了监控项目,不仅能看到崩溃时刻,还能追踪增长趋势
- 整理了边界日志,便于追踪是哪个职责打开、哪个职责关闭了资源
- 把调查结果整理成便于衔接后续异常路径测试基础设施的形式
本案例关联的服务
本案例既关联排查只在长期运行后才出现的故障的 故障调查 & 根本原因分析,也关联从实现侧整理日志、重连和运维观测的 Windows 应用程序开发。
联系我们
如果您遇到的问题与本页内容相近,欢迎附上当前状况和所需支持的形式与我们联系。