所以我有一个简单的Go Web应用程序,我部署为Docker容器。我正在使用CoreOS AMI在AWS上运行t2.small
实例。
容器非常小,根据docker stat
仅使用大约10MB的内存:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
8e230506e99a 0.00% 11.11 MB / 2.101 GB 0.53% 49.01 MB / 16.39 MB 1.622 MB / 0 B
然而,CoreOS实例似乎使用了大量内存:
$ free
total used free shared buffers cached
Mem: 2051772 1686012 365760 25388 253096 1031836
-/+ buffers/cache: 401080 1650692
Swap: 0 0 0
正如你所看到的那样,它的2GB总内存使用了近1.7GB的内存,只剩下大约300MB。而这似乎正在慢慢恶化。
我已经让该实例运行了大约3天,并且在新推出并启动单个Docker容器后,可用内存从大约400MB开始。
这是我应该担心的吗?或者当我在容器中的小Go应用程序仅使用10MB时,CoreOS应该使用如此多的内存。
答案 0 :(得分:2)
因为很多内存使用都是缓冲区和缓存。更好的指标是来自Docker的应用程序(如果它是一个小型Go应用程序可能会关闭)和操作系统总使用率minux缓冲区和第二行缓存(更接近400 MB)。
请参阅link以获得不错的解释。