为什么SLES 12上的docker容器与Ubuntu相比需要2倍的内存?

时间:2017-06-19 15:28:23

标签: docker

我注意到我在SLES 12上的docker容器占用的内存大约是Ubuntu上相同容器的2倍。相同版本的docker。

例如,运行selenium / hub,并且没有运行任何测试(根本没有对容器做任何事情),这是大约1分钟后的docker统计数据:

只需加载selenium / hub,不做任何事情(没有测试等):

SLES 12:

CONTAINER    CPU % MEM USAGE / LIMIT   MEM %    NET I/O       BLOCK I/O     PIDS
8ce43b4e9a23 0.06% 149.1MiB / 15.6GiB  0.93%    0B / 0B       57.5MB / 0B   0

Ubuntu的:

CONTAINER    CPU % MEM USAGE / LIMIT     MEM %   NET I/O       BLOCK I/O       PIDS
05d3140608b4 0.12% 74.79 MiB / 15.67 GiB 0.47%   0 B / 648 B   0 B / 8.19 kB   26

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

docker info的输出是什么?

在Ubuntu上,默认存储驱动程序为aufs,而SLES使用devicemapperbtrfs

摘自以上链接:

  

内存使用:devicemapper使用的内存比其他内存多   存储驱动程序每个启动的容器都会加载一个或多个副本   它的文件存入内存,具体取决于同一文件的块数   正在同时修改。由于记忆压力,   devicemapper存储驱动程序可能不是某些特定的正确选择   高密度使用案例中的工作量。

-

  

页面缓存。 Btrfs不支持页面缓存共享。这意味着   访问同一文件的每个进程都将文件复制到   Docker主机的内存。因此,btrfs驱动程序可能不是   最佳选择高密度用例,如PaaS。

SLES 12支持的存储驱动程序:

https://www.suse.com/documentation/sles-12/singlehtml/book_sles_docker/book_sles_docker.html#Docker_Used_Drivers

如果您使用4.4.21内核升级到SP2,我想您可以使用 overlay2

https://www.novell.com/support/kb/doc.php?id=3594951

答案 1 :(得分:0)

由于您使用相同的图像但获得不同的资源消耗指标,我想这是因为各个操作系统上的基本内核不同。

您的容器(由docker创建)消耗的资源量取决于它。 Docker使用内核级API(cgroups and namespaces)来促进程序所需的隔离。