我们的一台 Docker 主机无缘无故地频繁交换 - 至少没有明显的原因(它是一台 Ubuntu 16.04LTS VM)。总的来说,所有 Docker 容器只使用了 12GB 内存中的约 4GB,但系统除了 6GB 交换空间外还使用了 10GB 物理内存。
是什么原因造成的?“大”是 的一个实例sonatype/nexus3
和 的一个实例gitlab/gitlab-ce
。当查看 htop 中的进程并按 排序时MEM%
,没有出现任何异常,尤其是在某处“使用”的 14GB 范围内没有任何异常。
xxx@docker-static:~$ free -m
total used free shared buff/cache available
Mem: 12015 10441 563 537 1010 670
Swap: 11670 6623 5047
xxx@docker-static:~$ docker stats --no-stream
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
18c956010080 0.81% 541.9MiB / 11.73GiB 4.51% 82.1GB / 3.8TB 149GB / 2.25GB 230
35ec9741be74 0.48% 1.887MiB / 11.73GiB 0.02% 22.1MB / 30.1MB 8.82GB / 5.57MB 8
e90b429c45f4 0.00% 68KiB / 11.73GiB 0.00% 10.5MB / 23kB 19.4MB / 11.2MB 1
091fd79b7b3c 19.17% 1.908GiB / 11.73GiB 16.26% 6.36GB / 526GB 985GB / 43.7GB 353
a1e0dd98679f 0.53% 924.2MiB / 11.73GiB 7.69% 83.9GB / 37.5GB 347GB / 9.98GB 182
1d5368d1ce24 0.25% 60.54MiB / 11.73GiB 0.50% 40.1GB / 112GB 102GB / 2.7GB 12
a0aba32126ec 0.00% 56KiB / 11.73GiB 0.00% 17.1MB / 9.48MB 6.25GB / 18.5MB 4
cc9065d65372 0.00% 256KiB / 11.73GiB 0.00% 1.12MB / 92.6kB 3.07GB / 12.3MB 2
92cb16f6bfc8 0.04% 6.031MiB / 11.73GiB 0.05% 13.1TB / 13.1TB 21.6GB / 1.81GB 4
答案1
大多数内存状态工具仅包含正在使用的物理内存量,因此交换最终被隐藏。试试这个:
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
也top -oRES
可能更有帮助。因为主机可以看到所有进程,即使在应该列出所有内容的容器中也是如此。您的内存占用可能甚至不在其中一个容器中。
https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/