Golang高docker停泊时间在docker/ kubernets

我正在将使用AWS Elastic Beanstalk编写的Web应用程序迁移到Kubernets ,我发现在运行应用程序时,垃圾收集器暂停时间(我使用Newrelic来监视应用程序)增加了大约100。

我相信这跟Kubernet的CPU限制有关。

有没有人有什么想法是什么真的造成它? 有可能克服吗?

下面是这个区别的一个小例子。

Elastc豆茎:

GC暂停时间 -  Elastic Beanstalk

Kubernets:

GC暂停时间 -  Kubernets

经过一些testing和更多的研究,我发现了一些有趣的事情 Docker的CPU限制似乎对GC时间/暂停有很大的影响。 经过一些testing,我得到的CPU限制为500m ,这意味着一个8核心机器的1/2 CPU。

我设置GOMAXPROCS = 1GOGC = 1000 ,这导致更less和更快的GC暂停,但平均内存使用增加。

以下是Kubernets和Elastic Beanstalk的概述

Kubernetes:

GC概述 -  Kubernetes

Elastic Beanstalk:

GC概述 -  Elastic Beanstalk