为什么我的Docker容器在SLES 12上的内存比Ubuntu要多两倍?

我注意到,与Ubuntu上相同的容器相比,SLES 12上的Docker容器大约花费了两倍的内存。 相同版本的docker。

例如,运行selenium / hub,并且不运行任何testing(根本不用任何容器),大约1分钟之后的docker统计信息如下:

只要加载selenium/枢纽,而不做任何事情(没有testing等):

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 

有任何想法吗?

docker info的输出是什么?

在Ubuntu上,默认存储驱动程序是aufs,而SLES使用devicemapper或btrfs 。

以上链接摘录如下:

内存使用情况:devicemapper使用比其他一些存储驱动程序更多的内存。 每个启动的容器都会将其文件的一个或多个副本加载到内存中,具体取决于同一文件同时修改了多less个块。 由于内存压力,devicemapper存储驱动程序可能不是高密度用例中某些工作负载的正确select。

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

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

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

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

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

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

你的容器(由docker创build)消耗多less资源取决于它。 Docker使用内核级别的API( cgroups和命名空间 )来简化程序所需的隔离。