[Docker] 用 docker stats 指令觀察 container 的資源使用量
今天同事回報說,修改過後的 Makefile 因為使用 make -j 同步編譯的關係,
記憶體吃的很兇,導致 Jenkins slave 斷線了…
老實說我還真沒想到 make -j 會很吃資源這件事,只想到要讓 make 快一點~
但是要怎麼看 make 使用的記憶體量呢?
因為我是在 Docker 的 container 裡面跑 make 的,
因此可以用 docker stats 這個指令直接觀察 container 的資源使用量:
docker stats
執行之後,就會顯示目前所有執行中的 container,
所吃掉的 CPU, 記憶體, 網路和磁碟 I/O 等等,並且持續更新 (像 watch 指令一樣):
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O 1792fa8371b0 99.80% 4.281 GB / 33.47 GB 12.79% 7.86 kB / 648 B 0 B / 2.816 GB 3bd118a35870 0.00% 82.63 MB / 33.47 GB 0.25% 4.46 MB / 648 B 36.86 kB / 0 B 7898b6300d41 0.00% 82.74 MB / 33.47 GB 0.25% 4.236 MB / 648 B 0 B / 2.419 GB
如果只想觀察特定的 container,可以執行 docker stats <container id>。
用上面的指令觀察了一陣子,發現我在跑 make -j 的那個 container
(本例中的 1792fa8371b0) 記憶體的確吃很兇,
最高有衝到 5~6 GB,比較常是在 3~4 GB 的使用量,
而如果沒有用 make -j 的話,大約都是在 1xx MB 左右…
猜測是因為同時多個工作在編譯,因此記憶體用量拉高,
想要降低的話,可能只能用 make -j <thread num> 的方式來限制同步執行的數量,
不過這樣子編譯速度又會慢下來了,真是傷腦筋呀…
(本頁面已被瀏覽過 1,386 次)