首页 > 解决方案 > CGO 的 OOM 异常

问题描述

我们正在运行一个服务(用 Go 编写),它使用 CGO 在 C++ 中将大量数据加载到内存中。这个内存数据需要每小时刷新一次。

我们观察到每次数据刷新后内存使用量都在增加。在进一步检查中,我们发现 Go 在 GC 后没有将内存返回给操作系统。我们从运行时/调试中调用了 FreeOSMemory,但这并没有将所有内存释放回操作系统。

在 Go 中也没有办法指定最大内存。现在,每 10-12 次数据刷新后,进程就会因 OOM 异常而死亡。如何解决这个问题?

我已经检查过 C++ 代码中没有内存泄漏。

标签: goout-of-memorycgo

解决方案


推荐阅读