2016-09-26 54 views
1

我有一些作爲docker容器運行的進程和一些直接在主機上運行的進程。實際上,其中一個主機進程也會啓動其他docker容器。所以,把所有東西都搬到docker裏面,然後在docker裏面運行docker並不是我想做的事情。Docker CPU與主機進程爭用

在大量的碼頭集裝箱啓動時,它們最終會佔用100%的cpu,幾乎沒有爲主機進程留下任何東西。即使是應該殺死這些容器的宿主進程也無法運行。

是否有可能將所有碼頭集裝箱的總CPU使用率限制在90%左右,所以即使在負載較重的情況下,主機進程也會得到10%的cpu?

設置共享CPU沒有幫助,因爲它們只是所有碼頭集裝箱的相對權重。他們不會爲主人留下任何東西。

設置CPU配額不是最理想的,它們要麼在使用率低時導致利用率低下,要麼在負載很重時仍然不能停止。

回答

1

如果您以本機方式運行,則無法以此方式限制負載。

如果您使用的是虛擬機(例如在OSX或Windows上運行),則可以通過虛擬機設置來限制此設置,但除此之外,沒有任何方法可以使用docker有效執行此操作。但是,如果要限制機器可用CPU的總數,則可以嘗試使用--cpusetdoc link),它允許您指定容器的可用CPU總數。

根據您的情況,您可能可以完成這項工作 - 如果您在4核心機器上運行,則可以將3分配給容器並將1留給主機。這仍然是一種低效率,但也許足夠適合你的情況。

從文檔:

$ docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash 

但我不知道這會好一點,如果你已經找到了CPU配額選項進行限制。

0

爲了擴展最後的答案,在高級設置(Windows版本)中可以看到專用於docker的cpu數量。

enter image description here