go - CGO 的 OOM 异常
问题描述
我们正在运行一个服务(用 Go 编写),它使用 CGO 在 C++ 中将大量数据加载到内存中。这个内存数据需要每小时刷新一次。
我们观察到每次数据刷新后内存使用量都在增加。在进一步检查中,我们发现 Go 在 GC 后没有将内存返回给操作系统。我们从运行时/调试中调用了 FreeOSMemory,但这并没有将所有内存释放回操作系统。
在 Go 中也没有办法指定最大内存。现在,每 10-12 次数据刷新后,进程就会因 OOM 异常而死亡。如何解决这个问题?
我已经检查过 C++ 代码中没有内存泄漏。
解决方案
推荐阅读
- google-apps-script - 仅在更改链接的工作表的一个单元格时触发书面功能
- angular7 - 以角度反应形式读取跨度值
- r - 以列为条件按组生成随机分布
- css - 使用这三种技术导入 css 有什么区别?
- javascript - 将子字符串提取到 GTM 变量中的简单代码(谷歌标签管理器)
- http - 谷歌驱动器“补丁语义”和部分文件更新
- cypress - cypress:如果元素 xpath 不存在,如何管理应用程序流
- java - PDF字体嵌入无法使用PDFBox
- xamarin - SwipeView 中的 Xamarin Forms Shapes 无法始终如一地工作
- python - 如何将多个 html 表格组合成一个最终的 html 文件