跳转至

避免OOM

如何避免虚拟机出现OOM

在开设具有大量内存活动的vm(内存负载高的vm)时,容易出现OOM,那实际生产环境中如何避免该问题出现?

实际在设置时,guest的内存大小要小于limits。这样预留的内存就给pod virt-launcher 使用了,预留内存大小根据实际情况进行设置。

memory:
      # 预留内存100M
      guest: 8092M
    cpu:
      cores: 2
    resources:
      # overcommitGuestOverhead 该值默认为 false
      overcommitGuestOverhead: false
      requests:
        memory: 8192M
      limits:
        memory: 8192M

一般来说,overcommitGuestOverhead被设计为用于非保证QOS的虚拟机(虚拟机不指定resources.limits.memory时), 这些虚拟机不受内存限制,可以使用来自节点的更多内存,并且有足够的资源。 一个非常保守的假设与overcommitGuestOverhead: true相结合:如果swap被禁用(通常应该禁用),则不能使用此功能。 在某些极端情况下,使用swap来运行k8s是有意义的,但我不建议在一般情况下启用它(最明显的问题是kubelet无法再检测内存压力)。

参考issue 4560

参考how much memory is needed fo virt-launcher internal usage