容器記憶體占用之系統cache介紹
2017-04-06 13:22:12
作業系統
緣起:
監控(docker stats)顯示容器記憶體被用完了,進入容器瞅了瞅,沒有發現使用記憶體多的進程,使用awk等工具把容器所有進程使用的記憶體加起來看看,距離用完還遠了去了,何故?
分析:
該不會docker stats計算錯誤?
進入/sys/fs/cgroup/memory/docker/xxxxx/ 檢視memory.usage ,確認計算沒有錯誤
我們知道,系統記憶體會有一部分被buffer、cache之類佔用,linux也會把這部分記憶體算到已使用,對於容器來講,也應該存在此“問題”,而且非常有可能linux會把某容器引發的cache占用算到容器佔用的記憶體上;驗證很簡單,進容器dd一個大檔案就知道了:
dd 大檔案後,docker stat顯示已用記憶體變多
宿主機上: echo 3 > /proc/sys/vm/drop_caches 後,docker stat顯示已用記憶體變少
至此,原因查明
問題:
對於宿主機來講,計算記憶體占用時,可以拿已用記憶體減去cache/buffer ,那麼對於容器來講,如果減去容器部分的cache/buffer 呢?如果不減去,也會造成誤報警
測試發現: dd 產生的檔案cache占用的記憶體會計算到 inactive_file 的頭上