[Docker] 用 docker stats 指令觀察 container 的資源使用量

[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,385 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料