在Docker / kubernetes上Golang高GC暂停时间

时间:2017-03-08 16:02:25

标签: go docker kubernetes

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

我认为这与Kubernet所做的CPU限制有关。

有没有人知道究竟是什么导致了它?是否有可能克服它?

下面是一个很小的例子。

Elastc Beanstalk:

GC Pause time - Elastic Beanstalk

Kubernets:

GC Pause time - Kubernets

经过一些测试和更多的研究,我发现了一些有趣的东西。 Docker的CPU限制似乎对GC时间/暂停有很大影响。经过一些测试后,我将CPU限制设置为500m,这意味着8核机器的大约1/2 CPU。

我设置了GOMAXPROCS = 1GOGC = 1000,这导致GC暂停越来越少,但平均内存使用量却增加了。

以下是Kubernets和Elastic Beanstalk的27小时概述

Kubernetes:

GC overview - Kubernetes

Elastic Beanstalk:

GC overview - Elastic Beanstalk

0 个答案:

没有答案