docker容器上的内存和CPU管理

时间:2015-01-11 21:47:47

标签: selenium docker redhat

我在Docker容器上运行selenium网格。我有一个运行selenium hub的容器和另外五个运行chrome-nodes的容器(每个容器最多有5个会话)。问题是,测试团队请求随机数量的chrome会话。通常,当有大约5个chrome会话请求时,内存使用率上升到80%,CPU上升到95%。还有一个请求和所有容器都停止运行,使得每个人都无法使用selenium。

我的问题是如何防止这种情况发生?由于我无法控制测试团队会请求的会话数,因此我想限制Docker容器可用的RAM和CPU百分比。我是否必须在每个容器上执行此操作,或者只为Docker应用程序执行一次?

1 个答案:

答案 0 :(得分:3)

AFIK,您必须限制docker run中的每个容器资源。来自Docker Run Reference

  

CPU和内存的运行时限制

     

操作员还可以调整性能参数   容器:

     

-m="": Memory limit (format: <number><optional unit>, where unit = b, k, m or g)   -c=0 : CPU shares (relative weight)

     

操作员可以轻松限制容器可用的内存   与docker run -m。如果主机支持交换内存,则-m   内存设置可能比物理RAM大。

     

类似地,操作员可以增加此容器的优先级   使用-c选项。默认情况下,所有容器都以相同的方式运行   优先级和获得相同比例的CPU周期,但你可以告诉   内核为一个或多个容器提供更多的CPU时间份额   当你通过Docker启动它们时。

     

标志-c或--cpu-shares的值为0表示正在运行   container可以访问所有1024(默认)CPU份额。但是,这个   可以修改value以运行具有不同优先级的容器或   不同比例的CPU周期。

     

例如,如果我们使用默认值启动三个{C0,C1,C2}容器   (-c OR --cpu-shares = 0)和一个{C3}(-c或--cpu-shares = 512)   然后C0,C1和C2可以访问100%的CPU份额(1024)和C3   只能访问50%的CPU份额(512)。在一个的背景下   时间量级设置为100毫秒的容器时间切片操作系统   C0,C1和C2将运行全时量子,而容器C3将运行   运行半衰期,即50毫秒。

您还可以使用选项--cpuset指定容器使用的核心。例如:--cpuset=0-3--cpuset=0--cpuset=3,4