记录一次线上服务OOM排查
下午两点新版本上线其中一个消费者服务的内存增长速度异常迅速在短短五分钟内就用完了2G内存并自动重启了pod之后又在五分钟内OOM了在四十分钟内服务的pod已经重启了八十几次要知道我们之前这个消费者服务正常运行时候只用了不到500M。分析首先进行初步分析这是一个消费者服务并且新版本的需求中并没有新增消费topic并且业务量也没有大的波动不存在是业务访问量骤增导致OOM所以极大概率会是代码问题。当然每一个版本的新代码都非常多需求也比较庞杂直接去看代码肯定是不行的这时候就要麻烦部门的运维大佬了让他给我们dump一下给出一个内存溢出时的性能记录文件通过这个文件可以分析内存分配、线程创建、CPU使用、阻塞、程序详细跟踪信息等。我这里使用的Go语言开发一般用pprof文件进行分析运维给出的文件有以下6个main-1-trace-1227152939.pprof记录程序执行的详细跟踪信息包括函数调用、Goroutine 的创建和调度等main-1-threadcreate-1227152939.pprof记录线程创建的剖析数据帮助分析线程创建的频率和开销。main-1-mutex-1227152939.pprof记录互斥锁mutex的使用情况帮助分析锁竞争和锁等待的开销。main-1-mem-1227152939.pprof记录内存分配的剖析数据帮助分析内存使用的热点和分配情况。main-1-cpu-1227152939.pprof记录 CPU 使用的剖析数据帮助分析 CPU 时间的消耗情况。main-1-block-1227152939.pprof记录阻塞操作的剖析数据帮助分析阻塞操作的频率和开销。内存OOM那最重要的当然是mem文件也就是内存分配剖析数据不过很不幸服务重启速度太快了运维大佬dump的时候正好处于服务刚重启的时候所以mem文件中显示的内存才占用不到20M并且占比上也没看出有什么问题。想让运维再帮忙dump一下内存快要OOM的时候但是为了线上服务的稳定性版本已经回退了无法重新dump只能从其他几个文件中查找问题了。除了内存占用分析在性能问题分析中CPU占用分析也是极为重要的一环这一查看就有意思了CPU总的使用率虽然不高但是这个占比就比较奇怪了。第一占比的runtime.step是Go的运行时系统负责管理内存分配、垃圾回收、调度goroutine等底层操作这个暂且不管占比第二的居然是runtime.selectgo这个就非常诡异了select一般用于channel的非阻塞调用但是问题是新增代码中没有地方显示地调用了select那可以初步判断是底层源码中某处一直在调用select函数不过目前还不知道是谁触发的这个调用还需要继续查看其他文件。之后继续查看互斥锁的情况其实这个文件在目前这种情况下排查的价值已经不大了因为出现问题的是内存溢出而不是CPU占用率并且CPU占用率确实不是很高而且Go中是有检索死锁的机制大部分死锁是能够被Go发现并报一个deadlock错误打开文件之后发现果然没有死锁发生。接下来查看阻塞操作的分析情况从解析结果中可以看出select的阻塞时间遥遥领先select出现这种情况只会是存在case但是没有default的时候当所有case不符合的时候负责这个select的goroutine会阻塞住直到存在符合的case出现才会唤醒继续走下去当时我看到这我满脑子问号谁家好人select不加default啊再查看线程创建情况由于pod刚启动不久所以这个文件也看不出什么东西很正常的线程创建。看到这里还是没能定位到问题所在但是别急我们还有最重要的文件还没看那就是trace文件它可以记录程序执行的详细跟踪信息包括函数调用、Goroutine 的创建和调度使用go自带的pprof分析工具打开trace文件go tool trace main-1-trace-1227102939.pprof会出现以下本地页面在Goroutine分析中可以锁定真正的问题所在了在go-zero的core包下的collection文件在不到一秒内创建了两万多的Goroutine虽然两万多数量不多但是这个速度十分异常最重要的是这个定时轮就很奇怪这个项目中根本没有定时任务接下来就很容易查询了只要查找这次提交的代码中哪里使用到了collection包。经过一番全局搜索后最终确定了问题代码func NewXXXLogic(svcCtx *svc.ServiceContext, ctx context.Context) *XXXLogic { cache, _ : collection.NewCache(30 * time.Second) return XXXLogic{ Logger: logx.WithContext(ctx), svcCtx: svcCtx, ctx: ctx, localCache: cache, } }在新上线的版本中只有这一处用到了collection包原本这里的意思是将建立一个缓存放到上下文中去传递但是乍一看我没有看出有什么问题过期时间也设置了按照我原有理解过期时间到了就会自动释放掉为什么还是会内存溢出了但是我忽然意识到应该不是缓存引发的内存溢出可能是协程过多引发的内存溢出因为一个初始协程是2KB左右如果数量过多也会造成内存不够。为了探究根本原因我点进了collection包的源码进行查看在其中NewCache()方法中找到了造成协程数异常增加的定时轮创建方法NewTimingWheel()。之后点进去这个方法进一步查看可以看到这个定时轮的结构体里面包含了四个channel以及一些其他数据结构粗略估计这一个TimingWheel结构体所占内存要达到一百字节以上这是一个比较庞大的对象如果无限制的创建下去很容易造成内存OOM发生。

相关新闻

A股量化策略日报(2026年07月01日)

A股量化策略日报(2026年07月01日)

A股量化策略整合报告 2026年07月01日 整合时间:08:01📊 报告自动同步 (04:16) Response 报告同步完成,2026年07月01日 04:16:50 CST📊 小志和小丁量化工作流 (05:21) 🚀 长线分析Agent结论 这是一个典型的"格雷厄…

2026/7/2 20:52:35阅读更多 →
ub-dhcp容器化部署:使用Docker和Kubernetes的最佳实践指南 [特殊字符]

ub-dhcp容器化部署:使用Docker和Kubernetes的最佳实践指南 [特殊字符]

ub-dhcp容器化部署:使用Docker和Kubernetes的最佳实践指南 🚀 【免费下载链接】ub-dhcp ub-dhcp is an implementation of Linux dhcp for ub device. 项目地址: https://gitcode.com/openeuler/ub-dhcp 前往项目官网免费下载:https:/…

2026/7/2 20:52:35阅读更多 →
AI科技热点日报 | 2026年7月2日

AI科技热点日报 | 2026年7月2日

文章目录AI科技热点日报 | 2026年7月2日📌 今日摘要🔬 一、大厂动态1. 韩国芯片巨头联手"万亿级"投资:三星、SK海力士重仓AI存储芯片2. Anthropic推出Claude Science:AI切入科研自动化赛道3. 美国政府解除Claude出口禁令…

2026/7/2 20:52:35阅读更多 →
【计算机Java毕业设计案例】基于 SpringBoot 的中药仓库物资流转管理系统的设计与实现 基于 SpringBoot 的中药材过期预警与库存维护系统(程序+文档+讲解+定制)

【计算机Java毕业设计案例】基于 SpringBoot 的中药仓库物资流转管理系统的设计与实现 基于 SpringBoot 的中药材过期预警与库存维护系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/2 22:02:45阅读更多 →
48tools:一站式跨平台媒体内容自动化管理工具

48tools:一站式跨平台媒体内容自动化管理工具

48tools:一站式跨平台媒体内容自动化管理工具 【免费下载链接】48tools 48工具,提供公演、口袋48直播录源,公演、口袋48录播下载,封面下载,B站直播抓取,B站视频下载,A站直播抓取,A站…

2026/7/2 22:02:45阅读更多 →
Linux下纯C实现的EXT2文件系统教学模拟器(用户态可执行)

Linux下纯C实现的EXT2文件系统教学模拟器(用户态可执行)

本文还有配套的精品资源,点击获取 简介:一套能在Linux和Windows上直接用gcc编译运行的EXT2文件系统模拟程序,包含init.c、main.c、init.h、main.h四个核心文件,不依赖内核模块或虚拟机环境。运行后可直观查看超级块、组描述符、…

2026/7/2 22:02:45阅读更多 →
如何快速实现音频转乐谱:终极音乐转录工具完全指南

如何快速实现音频转乐谱:终极音乐转录工具完全指南

如何快速实现音频转乐谱:终极音乐转录工具完全指南 【免费下载链接】Automated_Music_Transcription A program that automatically transcribes a music file with polyphonic piano music in .wav format to sheet notes. 项目地址: https://gitcode.com/gh_mir…

2026/7/2 22:02:45阅读更多 →
Wedecode:微信小程序安全审计与代码还原的终极解决方案

Wedecode:微信小程序安全审计与代码还原的终极解决方案

Wedecode:微信小程序安全审计与代码还原的终极解决方案 【免费下载链接】wedecode 全自动化,微信小程序 wxapkg 包 源代码还原工具, 线上代码安全审计,支持 Windows, Macos, Linux 项目地址: https://gitcode.com/gh_mirrors/we/wedecode …

2026/7/2 22:02:45阅读更多 →
Atari游戏下DQN/PPO/A2C智能体的对抗扰动实验与鲁棒性加固代码包

Atari游戏下DQN/PPO/A2C智能体的对抗扰动实验与鲁棒性加固代码包

本文还有配套的精品资源,点击获取 简介:专为Atari环境设计的强化学习对抗攻防实践工具集,支持DQN(基于Tianshou)、PPO和A2C三类主流算法。提供五种观测空间扰动攻击实现:统一扰动、战略定时、临界点、关…

2026/7/2 21:57:45阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →