内存和docker集装箱上的cpupipe理

我正在Docker容器上运行selenium网格。 我有一个运行selenium集线器的容器和五个运行chrome-nodes的容器(每个容器最多有5个会话)。 问题是,testing团队请求chrome会话的随机数。 一般情况下,当有大约5个chrome会话请求时,内存使用率上升到80%,CPU上升到95%。 还有一个请求和所有的容器,使selenium不可用于每个人。

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

AFIK,你将不得不限制docker run每个容器资源。 从Docker运行参考 :

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周期比例,但是当您通过Docker启动时,您可以告诉内核将更多的CPU时间份额分配给一个或多个容器。

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

例如,如果我们使用默认值(-c或–cpu-shares = 0)和(c或 – cpu-shares = 512)来启动三个{C0,C1,C2}容器,则C0, C1和C2可以访问100%的CPU份额(1024),而C3只能访问50%的CPU份额(512)。 在时间分割操作系统的情况下,时间间隔集合为100毫秒,容器C0,C1和C2将运行全时间量程,而容器C3将运行半时间量程,即50毫秒。

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