2015-01-11 32 views
0

我在碼頭集裝箱上運行硒網格。我有一個運行硒中樞的容器和五個運行chrome-nodes的容器(每個容器最多5個會話)。問題是,測試團隊請求隨機數的chrome會話。一般情況下,當約有5個chrome會話請求時,內存使用率上升到80%,CPU上升到95%。還有一個請求和所有的容器都會讓硒不能供每個人使用。碼頭集裝箱上的內存和CPU管理

我的問題是如何防止這種情況發生?由於我無法控制測試團隊請求的會話數量,因此我想限制Docker容器可用的RAM和CPU的百分比。我必須在每個容器上執行此操作,還是隻需執行一次Docker應用程序的操作?

+0

它們在什麼意義上「都落下了」?我希望他們爭取可用的記憶;由於有更多的分頁機器,機器應該停機,否則Linux應該殺死一個進程爲其他機器騰出空間。也許它這樣做,並選擇Docker守護進程殺死? – Bryan

+0

從某種意義上說,所有容器都退出,很可能系統會終止Docker守護進程。 –

回答

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週期,但是當您通過Docker啓動它們時,可以告訴內核將更多CPU時間份額分配給一個或多個容器 。

值爲0的標誌-c或--cpu-shares表示正在運行的 容器可以訪問所有1024個(默認)CPU份額。但是,可以修改此值以運行具有不同優先級或不同CPU比率的容器。例如,如果我們用默認值 (-c OR --cpu-shares = 0)和一個{C3}(-c或--cpu-shares = 0)啓動三個{C0,C1,C2} 512) 那麼C0,C1和C2將有權訪問100%的CPU份額(1024),而C3 只能訪問50%的CPU份額(512)。在時間分割的OS的 的上下文中,時間量子集合爲100毫秒,容器 C0,C1和C2將運行全時量程,並且容器C3將運行半時量程,即50毫秒。

您還可以使用選項--cpuset指定容器使用的核心。例如:--cpuset=0-3--cpuset=0--cpuset=3,4