如何限制go使用的内存?

场景是这样,一个docker中跑两个进程。 一个java(服务程序),限制内存1.5G,一个go(监控采集tracing程序)

不限制内存的话,go可能耗尽内存,导致影响java。 go有什么方法像java一样限制使用的内存么?

当然,go可以跑在另一个docker中。

已邀请:

haohongfan - talk is expensive, just show code

赞同来自: buscoop joy

go出现耗尽内存的情况出现, 本身程序就不太正常.

我觉得需要分析一下: 为什么会出现内存耗尽, 然后根据出现的原因来优化程序.

限制go的内存使用, 这个思路感觉有些不太对

zengming00 - 野生程序猿

赞同来自: buscoop

以前我做过的某项目峰值请求1万5千每秒,连续运行半个月go消耗的内存也只有不到100M,你的程序肯定有问题

William

赞同来自:

那可以直接限制docker的内存使用情况

leigg - 剑豪X

赞同来自:

先检查程序啊,明显程序有问题。

ustb_diego

赞同来自:

我个人觉得go应该和java一样,可以指定最大内存量。 如果任由go使用内存,会影响服务器上其他程序的运行。

myonlyzzy

赞同来自:

首先第一个问题. docker的最佳实践是docker就是进程一个container 一个进程。不要把docker当vm使用。这是错误的。第二个问题,如果go 进程不跑在docker中怎么监控java进程. 你可以把go跑在另外一个docker容器中一样可以监控java进程的容器. 如果你是有k8s这样的编排系统需要的是prometheus这样的监控系统.

kevin - 杭州云柚科技

赞同来自:

限制会导致OOM,你确定要这样做的吗?

另外理论上应该不会出现这种内存无尽消耗的问题,尤其是一个监控程序,要么是代码实现问题导致的泄漏,要么是触发了某种runtime的bug。最好也debug一下。

ustb_diego

赞同来自:

对于有gc的语言,我认为都需要内存可控。 应用可选择部署在docker,或物理机,或虚机。 有兴趣各位可参考这篇文章 https://docs.google.com/document/d/1zn4f3-XWmoHNj702mCCNvHqaS7p9rzqQGa74uOwOBKM/mobilebasic#h.dvcic3om2vb5

要回复问题请先登录注册