Hsüan's Blog

2019-05-26

修復 Docker 在 mac 上面 cpu 超過 100% 一直過熱的現象

主要精神請參考此篇文章

以下各個方法內所說的 Preferences 可在桌面上方 Docker(圖示) 找到。

preferences

降低使用的資源

到 > Preferences > Advanced 裡,把 CPUs, Memory 調整成可以接受的範圍。

建議是使用少於一半的資源,甚至更少,最好是調整到風扇不會叫,不然真的很吵!

advanced

CPU 可用指令查詢,hw.logicalcpu,雖然我有 4 個,為了不要吵,我只給 1 個用

$ sysctl hw.physicalcpu hw.logicalcpu
hw.physicalcpu: 2
hw.logicalcpu: 4

Ram 的話,因為也沒要跑 headless 瀏覽器測試什麼的,就只給了 2g

vm 映像檔格式改為效能較好的 .raw

先在 > Preferences > Disk 確認 Disk image location 路徑副檔名結尾是不是 .raw。

disk

新版本的 Docker Desktop 預設應都已經採用 .raw。

如果你不是(像是從舊版升級來的,會是 .qcow2),則到 > Preferences > Reset 下使用 Reset disk image

reset

要注意,一但 Reset 之後,等於把所有 image, containers, volumes 都清空重來,如果有需要備份,請先備份。

把 Filesystem driver 改為效能較好的 overlay2

在終端機(Terminal)使用指令查詢:

$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.2
Storage Driver: overlay2
...

看一下 Storage Driver 是不是 overlay2

如果不是,一樣使用 Reset disk image (注意備份)

關掉不必要的檔案分享

Docker Desktop 預設是將 /Users, /Volumes, /private, /tmp 這四個 host 目錄分享給 vm。

而所謂的分享機制,實際上是在 vm 裡面映射了一份緩存,並監聽兩邊目錄(host 目錄跟 vm 緩存)的檔案變更。

假設一方有更動,就同步變更另一方。

所以減少這些目錄,理論上可以增加效能。

舉例來說,可以在 > Preferences > Fire Sharing 裡改成只分享 /Users/<username>/workspace 就好。

主要是為了避開一些像是 Download, Desktop, ... 這些常會下載東西的目錄,

不過因為我會用到像是 ~/.npmrc, ~/.config 這些 home 底下的目錄,要一個個添加太過麻煩,個人還是直接用了 /Users

file-sharing

使用 Volume 時,指定 delegated 模式

這其實就是指定分享目錄的同步模式。

預設沒指定會是 consistent 模式,此模式下兩邊目錄是實時同步的。

delegated 則是最弱的一種同步模式,不是很實時,相對而言效能是比較好的。

使用方式很簡單,指定 volume 時,在路徑最後多設定一個參數,像 docker run -v ~/project:/app:delegated

詳細同步規則可參考文檔 osxfs cache

© 2019 ~ 2024 Hsüan, Powered by Gatsby, Theme Material UI