我注意到我在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
有什么想法吗?
答案 0 :(得分:1)
docker info
的输出是什么?
在Ubuntu上,默认存储驱动程序为aufs,而SLES使用devicemapper或btrfs。
摘自以上链接:
内存使用:devicemapper使用的内存比其他内存多 存储驱动程序每个启动的容器都会加载一个或多个副本 它的文件存入内存,具体取决于同一文件的块数 正在同时修改。由于记忆压力, devicemapper存储驱动程序可能不是某些特定的正确选择 高密度使用案例中的工作量。
-
页面缓存。 Btrfs不支持页面缓存共享。这意味着 访问同一文件的每个进程都将文件复制到 Docker主机的内存。因此,btrfs驱动程序可能不是 最佳选择高密度用例,如PaaS。
SLES 12支持的存储驱动程序:
如果您使用4.4.21内核升级到SP2,我想您可以使用 overlay2 。
答案 1 :(得分:0)
由于您使用相同的图像但获得不同的资源消耗指标,我想这是因为各个操作系统上的基本内核不同。
您的容器(由docker创建)消耗的资源量取决于它。 Docker使用内核级API(cgroups and namespaces)来促进程序所需的隔离。