我正在将一个用Go编写的Web应用程序从 AWS Elastic Beanstalk 迁移到 Kubernets ,我注意到垃圾收集器暂停时间(我使用Newrelic监视应用程序)在运行应用程序时增加了大约100个。
我认为这与Kubernet所做的CPU限制有关。
有没有人知道究竟是什么导致了它?是否有可能克服它?
下面是一个很小的例子。
Elastc Beanstalk:
Kubernets:
经过一些测试和更多的研究,我发现了一些有趣的东西。
Docker的CPU限制似乎对GC时间/暂停有很大影响。经过一些测试后,我将CPU限制设置为500m
,这意味着8核机器的大约1/2 CPU。
我设置了GOMAXPROCS = 1
和GOGC = 1000
,这导致GC暂停越来越少,但平均内存使用量却增加了。
以下是Kubernets和Elastic Beanstalk的27小时概述
Kubernetes:
Elastic Beanstalk: