簡體   English   中英

Docker無法獲得100%的CPU

[英]Docker doesn't get 100% of the CPU

我們剛剛編寫了一個CPU密集型應用程序來對Docker鏡像進 它是一個Java應用程序,它近似於Pi的小數。

  • 如果我們運行java -jar superpi.jar它會強調所有內核並需要30秒
  • 如果我們運行docker run fewlaps/superpi它只會強調四個內核中的兩個,需要70秒

Docker鏡像正在運行.jar,就像在主機上運行它一樣。 為什么Docker鏡像沒有在本地運行.jar那么快? 我們期望在本地運行它並在Docker上運行它之間有一些區別,但是這個過程需要花費一倍的時間。

有沒有辦法要求Docker使用所有的CPU?

順便說一句,該項目在GitHub上發布: Fewlaps / SuperPI

朋友們,我充滿了恥辱:自己的MacOS Docker桌面客戶端有一個設置來啟用更多或更少的核心。 不知道它是否是在上一版本中添加的內容,但我沒有注意到。 默認情況下,它有兩個核心而不是四個,這看起來很精明。

以下是屏幕顯示方式:

在此輸入圖像描述

順便說一下,只有信息,在同一台機器上:

  • 運行.jar需要64,973毫秒
  • 運行運行.jar的Docker鏡像需要83,449毫秒

適用於MacOS的Docker和適用於Windows的Docker是您的問題出現的地方。 Docker不會在這些平台上本地運行(尚未),因此它們的安裝程序會啟動運行boot2docker的VM。 這些VM由VirtualBox控制,並且對分配給VM的CPU數量有限制。 這些限制可以調整,所以我從那里開始(查看您的Docker實例的VirtualBox配置,更改這可能需要重新啟動VM)。

要正確比較容器的開銷,您需要在運行Docker主機的VM內運行“容器外”測試。 那,或者在物理機器上運行Linux的機器上安裝Docker,而不是在VM內部。

有許多與CPU集和CPU份額相關的Docker命令行標志。 確保沒有設置或默認指定。 一旦你的容器運行,你可以使用docker ps找到它並使用docker inspect gloomy_archimedes查看設置,並在HostConfig部分查看CpuSharesCpusetCpus等內容。

您的Docker守護程序本身也可能受其init腳本或systemd單元定義的限制。 您可以通過查找Docker守護程序的PID和cat /proc/1199/status 尋找Cpus_allowed:應該設置為ff

或者如果您在Windows或Apple OS X上運行Docker,則Docker將需要使用虛擬機。 據我所知,所有Docker鏡像都期待Linux操作系統環境(盡管我認為有人可能正在構建需要VM在Linux上運行的Windows映像)。 該虛擬機將具有配置數量的CPU核心。 你需要找到一種方法來調整它,並確保它是你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM