代码之家  ›  专栏  ›  技术社区  ›  Jesse Shieh José Valim

如何启用Google容器优化操作系统交换限制支持

  •  1
  • Jesse Shieh José Valim  · 技术社区  · 6 年前

    我正在GCE实例上运行谷歌容器优化操作系统上的Kubernetes/Docker。当我跑步时 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容器一达到内存限制就会被oomkille,而不是尝试交换。我希望容器使用交换作为缓冲,而不是立即死亡。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Xuewei Zhang    5 年前

    容器优化操作系统(COS)实际上配置为完全禁用交换。您可以通过运行 cat /proc/meminfo | grep SwapTotal 在COS虚拟机中,这表示它已配置为0 kB。

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

    但如果您想尝试一下,这些命令可能会帮助您(以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