是否可以使用Docker关闭/重启CPU使用率过高的容器?

时间:2018-01-15 18:23:13

标签: amazon-web-services docker docker-swarm amazon-ecs

例如,如果任何容器由于任何原因在100%CPU下长时间停留(例如一分钟),是否可以设置规则以关闭它并启动新容器,或者使用Docker Swarm或AWS ECS重新启动它?

2 个答案:

答案 0 :(得分:1)

我会咬这个,因为我在AWS上遇到了与docker非常类似的问题。

首先,我认为您可以限制CPU份额,但不能限制它使用该份额的时间。

现在,我的应用程序占用了100%的CPU并且无法找出原因。原来我正在使用T2实例,并且他们有一个基线,一旦你使用所有cpu信用,他们将丢弃。因此,如果您使用1Gb实例,它将降至10%基线。这就像在250Mhz的CPU上运行你的应用程序一样。从内部来看,实例将显示100%的CPU,但它实际上受到主机的限制,只占真实CPU的一小部分。

如果是这种情况,您可以增加实例以获得每次更多的积分或启用T2无限制,这在大多数情况下可以免费使用,因为您有一整天可以补偿。

答案 1 :(得分:0)

我认为您可以像以下那样在AWS中执行类似的操作: - 针对ECS服务的CPUUtilization指标创建CloudWatch警报。有关使用EC2 CPU指标的示例,请参阅this article。 - 作为目标操作选择一个lambda函数,您可以创建该函数来杀死服务中的所有任务,生成新的任务,重新启动它们。

然而,这可能是一种矫枉过正。解决ECS中可用性问题的最简单和官方解决方案是将服务附加到负载均衡器并配置运行状况检查端点。这样,任何未能在指定时间内响应healtcheck调用的容器将被视为不健康并被杀死,从而产生新的容器。请参阅this article有关ECS和负载平衡的信息。