Changing status to "Confirmed". I don't think there are any relevant
logs for this issue. Here's some anecdotal evidence, though:

# dmesg | grep oom-killer
[1389379.248406] apt-mirror invoked oom-killer: gfp_mask=0x26000c0, order=2, 
oom_score_adj=0
[1399428.772409] chrome invoked oom-killer: gfp_mask=0x26000c0, order=2, 
oom_score_adj=300
[1421778.653435] java invoked oom-killer: gfp_mask=0x26000c0, order=2, 
oom_score_adj=0
[1464982.048253] sh invoked oom-killer: gfp_mask=0x26000c0, order=2, 
oom_score_adj=0
[1479431.535969] postgres invoked oom-killer: gfp_mask=0x26000c0, order=2, 
oom_score_adj=-900
[1508936.131513] mount invoked oom-killer: gfp_mask=0x24040c0, order=3, 
oom_score_adj=0
[1526250.556039] java invoked oom-killer: gfp_mask=0x26000c0, order=2, 
oom_score_adj=0

# cat /proc/uptime
1551384.55 11908654.03

So in the ~7 hours since changing these sysctls, the oom-killer hasn't
run, whereas it was running regularly before that.

** Changed in: linux (Ubuntu)
       Status: Incomplete => Confirmed

-- 
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:
  Confirmed

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