golang 项目,每隔几个月就 oom 一次,来不及打印内存占用,谁有好的排查方法啊?

350 天前
 ng001
2155 次点击
所在节点    程序员
12 条回复
mxT52CRuqR6o5
350 天前
golang 没有那种程序崩溃时自动把内存 dump 到硬盘的工具吗?
void00000
350 天前
定时用 pprof dump ,硬盘上只保存最近 10 次 dump 记录,如果 oom ,就分析最近 10 次使用 pprof dump 的记录
opengg
350 天前
某个请求触发了大量申请内存吧?
拿真实流量,按二分法压一下,确定大概的范围。
aw2350
350 天前
最好罗列一下系统内使用了哪些第三方包,有可能是第三方包有 bug,导致堆栈溢出
lysS
350 天前
oom 不也有日志吗?
676529483
350 天前
网关看看请求日志
应用日志里面找找
oom 本来就很难排查,我们以前 oom 开会从头到尾 review ,找出来的也不对,最后没办法线上 debug ,终于找到第三方包引用 c 库导致的
tiedan
350 天前
排查一下 cgo
aw2350
350 天前
排查一下系统有无加载数据到内存的操作,诸如导出数据,预加载、内存缓存等。一下子干到 12G 用时 3s,这么大的加载量看起来只能像是那种静态数据压到内存里去了
lecher
350 天前
启用 vm.overcommit_memory=1 ,系统将会在 OOM kill 时保留一份 core dump
触发后去查对应目录中拿当时的 core dump 文件 *.core 。跑 gdb 分析
hefish
350 天前
几个月一次,一年也有四五次。。。我觉着。。不是那种天问一号,神州系列的任务。。。就凑合着过吧。。哈哈
sadfQED2
350 天前
@hefish 哈哈哈,我们线上就是。刚开始发现问题,大家连夜排查,查了几天都查不出来,然后分给一个人单独排查。后来几个月了,也找不到原因,大家一合计,反正线上有自动重启,挂一台机器问题也不大,于是屏蔽报警就当解决了
brookegas
350 天前
1 、找一台内存 1G 的测试机压力测试一下,这样就不需要等几个月才 OOM
2 、将虚拟内存加到 100G ,这样 OOM 的时候有足够的反应时间来打印

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940129

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX