修復 Docker 在 mac 上面 cpu 超過 100% 一直過熱的現象
主要精神請參考此篇文章
以下各個方法內所說的 Preferences
可在桌面上方 Docker(圖示) 找到。
降低使用的資源
到 > Preferences > Advanced 裡,把 CPUs, Memory 調整成可以接受的範圍。
建議是使用少於一半的資源,甚至更少,最好是調整到風扇不會叫,不然真的很吵!
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。
新版本的 Docker Desktop 預設應都已經採用 .raw。
如果你不是(像是從舊版升級來的,會是 .qcow2),則到 > Preferences > Reset 下使用 Reset disk image
。
要注意,一但 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
使用 Volume 時,指定 delegated 模式
這其實就是指定分享目錄的同步模式。
預設沒指定會是 consistent 模式,此模式下兩邊目錄是實時同步的。
而 delegated
則是最弱的一種同步模式,不是很實時,相對而言效能是比較好的。
使用方式很簡單,指定 volume 時,在路徑最後多設定一個參數,像 docker run -v ~/project:/app:delegated
。
詳細同步規則可參考文檔 osxfs cache。