我在Docker容器上运行selenium网格。我有一个运行selenium hub的容器和另外五个运行chrome-nodes的容器(每个容器最多有5个会话)。问题是,测试团队请求随机数量的chrome会话。通常,当有大约5个chrome会话请求时,内存使用率上升到80%,CPU上升到95%。还有一个请求和所有容器都停止运行,使得每个人都无法使用selenium。
我的问题是如何防止这种情况发生?由于我无法控制测试团队会请求的会话数,因此我想限制Docker容器可用的RAM和CPU百分比。我是否必须在每个容器上执行此操作,或者只为Docker应用程序执行一次?
答案 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