如何启用 Google 容器优化 OS 交换限制支持

How to enable Google Container Optimized OS swap limit support

我正在 运行ning Kubernetes/Docker Google 容器优化 OS GCE 实例上。当我 运行 docker info 它说

$ docker info
Containers: 116
 Running: 97
 Paused: 0
 Stopped: 19
Images: 8
Server Version: 1.11.2
Storage Driver: overlay
 Backing Filesystem: extfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: null host bridge
Kernel Version: 4.4.21+
Operating System: Container-Optimized OS from Google
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 14.67 GiB
Name: REDACTED
ID: REDACTED
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support

最后一行说没有交换限制支持。我无法弄清楚如何启用交换限制支持。我找到了 Ubuntu/Debian here.

的说明

我的问题是我的 docker 容器在达到内存限制后立即被 OOMKilled 而不是尝试交换。我希望容器使用交换作为缓冲区而不是立即死亡。

Container-Optimized OS (COS) 实际上配置为完全禁用交换。您可以通过 COS VM 中的 运行ning cat /proc/meminfo | grep SwapTotal 验证这一点,它会说它配置为 0 kB。

我不确定在您的环境中启用交换是否是个好主意,因为如果您经常使用交换,它可能会导致更多问题(例如磁盘 IO starvation/slowdown、内核挂起)。

但如果您想尝试一下,这些命令可能会对您有所帮助(运行 所有这些都是 root):

cos-swap / # sysctl vm.disk_based_swap=1
vm.disk_based_swap = 1
cos-swap / # fallocate -l 1G /var/swapfile
cos-swap / # chmod 600 /var/swapfile
cos-swap / # mkswap /var/swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=406d3dfc-3780-44bf-8add-d19a24fdbbbb
cos-swap / # swapon /var/swapfile
cos-swap / # cat /proc/meminfo | grep Swap
SwapCached:            0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB