
一天 测试小美 反馈亚健康检测 xx模块出现内存泄漏
我顿时卡住,日志看无数次,有错误发生,这个业务报错 没关系呢,看很多次相关代码 2个小时过去了
没有思路,大家都知道 内存泄漏 申请 没有释放
这个不应该,业务执行这么长时间了,这个基本错误应该不出现
陷入投入无效努力中,
然后询问 你们确定是xx模块导致的,不是其他模块
还有其他错误,如何大海捞针明确具体错误
老李:小王 你明白 第一性原理
kv申请内容-【已经申请】--commit 提交---然后释放
为什么没释放,必然中间没有执行完成,
为什么完成,并发 异步处理, 有可能 commit请求 排队处理 没有调用,协程最害怕 就是其他函数占用耗时比较久
你需要看日志无用 和 亚健康检测人员为什么 必须跟踪堆栈 那个函数卡住。
结合 HA检测模块 30分钟没有释放,那些请求卡30分钟呢没处理完成!
commit 没执行2个原因
(1) 没有被调度 (2) commit 自己卡主了,一般不会。
问题变成:那个堆栈函数卡主了。
每个公司都有自己处理方式,整个链路很长。
这是一条分布式存储阵列的慢读 IO 调用栈(BackTrace),active(912ms) 说明该读请求已执行 912 毫秒未完成,属于慢 IO 告警,打印完整函数调用链用于定位时延卡点。
调用顺序为从上到下、从上层业务到底层驱动:调度入口 → 段读写层 → RAID 条带层 → 数据打包层 → IO 枢纽层 → 虚拟卷层 → IO 接口层 → 协程调度。
看着想着水文,但是公司处理问题时候,不把问题像太复杂
从原理上分析,然后找证据。找证据 需要深入计算机组成原理 gdb 内核源码 还是业务程序,一定找到答案,
相信你可以