如何获得在Docker容器中运行的进程的内存使用情况?

我已经创build了85个容器,并且所有的容器都在我的Linux机器上运行.net核心应用程序镜像。 我对所有容器的REST调用是相同的,但每个容器使用的内存是不同的。

这是我不明白,为什么使用的内存是不同的,因为所有的容器运行相同的图像,而REST调用也是一样的。

我能够通过使用以下方式获取容器使用的内存:

1)docker统计

CONTAINER- 7827fe8127eb CPU - 0.00% MEM USAGE / LIMIT - 67.1MiB / 7.666GiB MEM % - 0.85% NET I/O - 76.4kB / 6.19kB BLOCK I/O - 42.7MB / 0B 

从上面的统计我知道,我的容器使用的内存是67.1 MB

2)然后,我进入容器,试图找出正在运行的进程和这些进程使用的内存。

 docker exec -i -t 7827fe8127eb /bin/bash top 

在这里输入图像说明

现在从“docker统计”获得的统计数据表明,容器内存为67 MB,但是dotnet进程使用的内存是多less?

"RES"列值是否提供进程内存? 由于RES大小为92.70 MB,大于容器内存。

3)我使用docker engine api来获取容器统计信息。 但我不知道确切的哪个属性指定容器内存。

 "memory_stats": { "usage": 72302592, "max_usage": 84365312, "stats": { "active_anon": 47865856, "active_file": 6664192, "cache": 24477696, "dirty": 4096, "hierarchical_memory_limit": 9223372036854772000, "inactive_anon": 8450048, "inactive_file": 9318400, "mapped_file": 16236544, "pgfault": 118960, "pgmajfault": 104, "pgpgin": 120339, "pgpgout": 105242, "rss": 47824896, "rss_huge": 8388608, "total_active_anon": 47865856, "total_active_file": 6664192, "total_cache": 24477696, "total_dirty": 4096, "total_inactive_anon": 8450048, "total_inactive_file": 9318400, "total_mapped_file": 16236544, "total_pgfault": 118960, "total_pgmajfault": 104, "total_pgpgin": 120339, "total_pgpgout": 105242, "total_rss": 47824896, "total_rss_huge": 8388608, "total_unevictable": 4096, "total_writeback": 0, "unevictable": 4096, "writeback": 0 }, "limit": 8231383040 }, 

正如我无法find,67.1 MB在这里也是如此。

首先,我想知道,由于每个容器使用的内存不同,因为它们运行的​​是相同的映像,所以执行的REST操作也是相同的。

一些容器被发现使用高达93MB,所以需要知道,哪个容器过程实际上正在消耗最大的内存?

如果每个docker都安装了/proc/像往常一样(见proc(5) …)你可以使用它(例如运行pmap(1)等)