Go Tool Pprof 和Docker Stats 之間的記憶體使用差異
使用Go 1.11 時,您可能會遇到Go 報告的記憶體使用情況存在差異工具pprof (runtime.MemStats.sys) 和docker stats。 Docker stats 依賴 cgroup 來獲取記憶體使用信息,其中包括 Page Cache 和 Resident Set Size (RES)。另一方面,pprof 顯示記憶體使用情況的模糊值,因此很難直接比較兩者。
瞭解 cgroup 記憶體使用情況
cgroup 提供了一種方法限制和追蹤容器內的資源使用情況。 cgroups中的usage_in_bytes指標包括進程使用的記憶體和快取記憶體。如果容器從主機系統讀取文件,內核快取的記憶體也會計入usage_in_bytes。
Docker 中回收記憶體
如果容器達到其記憶體限制,Docker 嘗試回收未使用的記憶體。這與 OOM 錯誤不同,OOM 錯誤是在所有記憶體都被使用時發生的。
限制記憶體使用的方法
要控制docker 容器的記憶體使用,您可以可以在docker run 指令或docker-compose.yml 檔案中使用mem_limit 指定記憶體限制參數。
結論
pprof 和 docker stats 之間記憶體使用報告的差異源於它們測量記憶體利用率的不同方式。 docker stats 使用的 cgroups 在其計算中包括文件緩存內存,而 pprof 則提供一個模糊值而不考慮緩存。透過 cgroup 管理記憶體限制,您可以防止容器中記憶體不受控制的成長。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3