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