podoom排查的简单介绍
原标题:podoom排查的简单介绍
导读:
从OOM到根因:Go应用内存泄漏问题的pprof排查实战1、OOM原因:程序主要用于解析数据,内存消耗不可避免。在默认的2分钟GC周期内,内存使用量会达到GC阈值。由于GC阈...
从OOM到根因:Go应用内存泄漏问题的pprof排查实战
1、OOM原因:程序主要用于解析数据,内存消耗不可避免。在默认的2分钟GC周期内,内存使用量会达到GC阈值。由于GC阈值默认是GC后内存的两倍大小,因此GC阈值会持续扩大,直到接近总内存大小。在总内存大小附近进行GC时,由于GC过程是并发且分多阶段进行,并非所有阶段都完全停顿,因此程序在部分时间内会继续申请内存。
2、在拿到采样文件后,使用go tool pprof加载数据至交互模式控制台,通常会有提示信息展示文件内容类型。在交互式控制台中,使用top命令查看占用内存最多的函数,如发现gorm库中的某个方法导致内存泄露,进一步分析业务逻辑代码。top命令输出列表中,flat和cum值显示函数内存使用情况,sum%表示前几行flat%的总和。
3、接下来就是查问题,本来以为是内存泄漏,上了pprof工具之后发现,内存占用稳定在6g,而top命令则很快看到 RES 参数暴涨到12g+(机器内存16g)后被内核杀掉。百思不得其解。
4、NSQ的HTTP API设计简洁,支持调试工具如pprof,为管理员提供了实时监控数据。同时,适应Go语言的更新,管理依赖关系时考虑两种策略,确保了系统的兼容性和稳定性。在测试上,NSQ引入Context结构,解决了全局状态的问题,提高了测试的可靠性。