Public bug reported:

On my system, running a couple of LXD containers and VMs (16 GB RAM, 16
GB swap) seems to cause the kernel oom-killer to be frequently
triggered.

In order to try to resolve this, first I tried limiting the memory my
containers were allowed to use, such as by using:

    lxc config set <container> limits.memory 1024GB

... and restarting the containers for good measure. However, this didn't
resolve the problem.

After looking deeper into what might trigger the oom-killer even though
I seemed to have plenty of memory free, I found out that the kernel VM
overcommit can be tuned with the `vm.overcommit_memory` sysctl.

The default for value of `vm.overcommit_memory`, 0, uses a heuristic to
determine whether or not requested memory is available. According to the
`man 5 proc`, if the value is set to zero:

"""
    calls of mmap(2) with MAP_NORESERVE are not checked, and the
    default check is very weak, leading to the risk of getting a
    process "OOM-killed".
"""

Which seems to describe exactly my problem. However, upon setting this
value to 2, many of my open programs immediately aborted with out-of-
memory errors. This is because the default value for
`vm.overcommit_ratio` only allows the usage of 50% of the system's total
(memory + swap).

I then found the following answer on Server Fault:

    http://serverfault.com/a/510857/15268

The answers to this question seem to make a good case that the
overcommit_ratio should be set to 100.

In summary, I think the following sysctl values should be the new
defaults:

    vm.overcommit_memory = 2
    vm.overcommit_ratio = 100

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New

** Description changed:

  It seems that running a couple of LXD containers and VMs on my laptop
  (16 GB RAM, 16 GB swap) was is the kernel oom-killer to be frequently
  triggered.
  
  First I tried limiting the memory my containers were allowed to use,
  such as by using:
  
-     lxc config set <container> limits.memory 1024GB
+     lxc config set <container> limits.memory 1024GB
  
  ... and restarting the containers for good measure. However, this didn't
  resolve the problem.
  
  After looking deeper into what might trigger the oom-killer even though
  I seemed to have plenty of memory free, I found out that the kernel VM
  overcommit can be tuned with the `vm.overcommit_memory` sysctl.
  
  The default for value of `vm.overcommit_memory`, 0, uses a heuristic to
  determine whether or not requested memory is available. According to the
  `man 5 proc`, if the value is set to zero:
  
  """
-     calls of mmap(2) with MAP_NORESERVE are not checked, and the default 
check is very
-     weak, leading to the risk of getting a process "OOM-killed".
+     calls of mmap(2) with MAP_NORESERVE are not checked, and the default 
check is very
+     weak, leading to the risk of getting a process "OOM-killed".
  """
  
  Which seems to describe exactly my problem. However, upon setting this
  value to 2, many of my open programs immediately aborted with out-of-
  memory errors. This is because the default value for
  `vm.overcommit_ratio` only allows the usage of 50% of the system's total
  (memory + swap).
  
  I then found the following answer on Server Fault:
  
-     http://serverfault.com/a/510857/15268
+     http://serverfault.com/a/510857/15268
  
  In summary, I think the following sysctl values should be the new
  defaults:
  
-     vm.overcommit_memory = 2
-     vm.overcommit_ratio = 50
+     vm.overcommit_memory = 2
+     vm.overcommit_ratio = 100

** Description changed:

  It seems that running a couple of LXD containers and VMs on my laptop
  (16 GB RAM, 16 GB swap) was is the kernel oom-killer to be frequently
  triggered.
  
  First I tried limiting the memory my containers were allowed to use,
  such as by using:
  
      lxc config set <container> limits.memory 1024GB
  
  ... and restarting the containers for good measure. However, this didn't
  resolve the problem.
  
  After looking deeper into what might trigger the oom-killer even though
  I seemed to have plenty of memory free, I found out that the kernel VM
  overcommit can be tuned with the `vm.overcommit_memory` sysctl.
  
  The default for value of `vm.overcommit_memory`, 0, uses a heuristic to
  determine whether or not requested memory is available. According to the
  `man 5 proc`, if the value is set to zero:
  
  """
      calls of mmap(2) with MAP_NORESERVE are not checked, and the default 
check is very
      weak, leading to the risk of getting a process "OOM-killed".
  """
  
  Which seems to describe exactly my problem. However, upon setting this
  value to 2, many of my open programs immediately aborted with out-of-
  memory errors. This is because the default value for
  `vm.overcommit_ratio` only allows the usage of 50% of the system's total
  (memory + swap).
  
  I then found the following answer on Server Fault:
  
      http://serverfault.com/a/510857/15268
  
+ The answers to this question seem to make a good case that the
+ overcommit_ratio should be set to 100.
+ 
  In summary, I think the following sysctl values should be the new
  defaults:
  
      vm.overcommit_memory = 2
      vm.overcommit_ratio = 100

** Description changed:

- It seems that running a couple of LXD containers and VMs on my laptop
- (16 GB RAM, 16 GB swap) was is the kernel oom-killer to be frequently
+ On my system, running a couple of LXD containers and VMs (16 GB RAM, 16
+ GB swap) seems to cause the kernel oom-killer to be frequently
  triggered.
  
- First I tried limiting the memory my containers were allowed to use,
- such as by using:
+ In order to try to resolve this, first I tried limiting the memory my
+ containers were allowed to use, such as by using:
  
      lxc config set <container> limits.memory 1024GB
  
  ... and restarting the containers for good measure. However, this didn't
  resolve the problem.
  
  After looking deeper into what might trigger the oom-killer even though
  I seemed to have plenty of memory free, I found out that the kernel VM
  overcommit can be tuned with the `vm.overcommit_memory` sysctl.
  
  The default for value of `vm.overcommit_memory`, 0, uses a heuristic to
  determine whether or not requested memory is available. According to the
  `man 5 proc`, if the value is set to zero:
  
  """
      calls of mmap(2) with MAP_NORESERVE are not checked, and the default 
check is very
      weak, leading to the risk of getting a process "OOM-killed".
  """
  
  Which seems to describe exactly my problem. However, upon setting this
  value to 2, many of my open programs immediately aborted with out-of-
  memory errors. This is because the default value for
  `vm.overcommit_ratio` only allows the usage of 50% of the system's total
  (memory + swap).
  
  I then found the following answer on Server Fault:
  
      http://serverfault.com/a/510857/15268
  
  The answers to this question seem to make a good case that the
  overcommit_ratio should be set to 100.
  
  In summary, I think the following sysctl values should be the new
  defaults:
  
      vm.overcommit_memory = 2
      vm.overcommit_ratio = 100

** Description changed:

  On my system, running a couple of LXD containers and VMs (16 GB RAM, 16
  GB swap) seems to cause the kernel oom-killer to be frequently
  triggered.
  
  In order to try to resolve this, first I tried limiting the memory my
  containers were allowed to use, such as by using:
  
      lxc config set <container> limits.memory 1024GB
  
  ... and restarting the containers for good measure. However, this didn't
  resolve the problem.
  
  After looking deeper into what might trigger the oom-killer even though
  I seemed to have plenty of memory free, I found out that the kernel VM
  overcommit can be tuned with the `vm.overcommit_memory` sysctl.
  
  The default for value of `vm.overcommit_memory`, 0, uses a heuristic to
  determine whether or not requested memory is available. According to the
  `man 5 proc`, if the value is set to zero:
  
  """
-     calls of mmap(2) with MAP_NORESERVE are not checked, and the default 
check is very
-     weak, leading to the risk of getting a process "OOM-killed".
+     calls of mmap(2) with MAP_NORESERVE are not checked, and the
+     default check is very weak, leading to the risk of getting a
+     process "OOM-killed".
  """
  
  Which seems to describe exactly my problem. However, upon setting this
  value to 2, many of my open programs immediately aborted with out-of-
  memory errors. This is because the default value for
  `vm.overcommit_ratio` only allows the usage of 50% of the system's total
  (memory + swap).
  
  I then found the following answer on Server Fault:
  
      http://serverfault.com/a/510857/15268
  
  The answers to this question seem to make a good case that the
  overcommit_ratio should be set to 100.
  
  In summary, I think the following sysctl values should be the new
  defaults:
  
      vm.overcommit_memory = 2
      vm.overcommit_ratio = 100

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1666683

Title:
  Default VM overcommit sysctls in Ubuntu lead to unnecessary oom-killer
  invocation

Status in linux package in Ubuntu:
  New

Bug description:
  On my system, running a couple of LXD containers and VMs (16 GB RAM,
  16 GB swap) seems to cause the kernel oom-killer to be frequently
  triggered.

  In order to try to resolve this, first I tried limiting the memory my
  containers were allowed to use, such as by using:

      lxc config set <container> limits.memory 1024GB

  ... and restarting the containers for good measure. However, this
  didn't resolve the problem.

  After looking deeper into what might trigger the oom-killer even
  though I seemed to have plenty of memory free, I found out that the
  kernel VM overcommit can be tuned with the `vm.overcommit_memory`
  sysctl.

  The default for value of `vm.overcommit_memory`, 0, uses a heuristic
  to determine whether or not requested memory is available. According
  to the `man 5 proc`, if the value is set to zero:

  """
      calls of mmap(2) with MAP_NORESERVE are not checked, and the
      default check is very weak, leading to the risk of getting a
      process "OOM-killed".
  """

  Which seems to describe exactly my problem. However, upon setting this
  value to 2, many of my open programs immediately aborted with out-of-
  memory errors. This is because the default value for
  `vm.overcommit_ratio` only allows the usage of 50% of the system's
  total (memory + swap).

  I then found the following answer on Server Fault:

      http://serverfault.com/a/510857/15268

  The answers to this question seem to make a good case that the
  overcommit_ratio should be set to 100.

  In summary, I think the following sysctl values should be the new
  defaults:

      vm.overcommit_memory = 2
      vm.overcommit_ratio = 100

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1666683/+subscriptions

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to