NAME¶
/proc/pid/oom_score_adj - OOM-killer score adjustment
DESCRIPTION¶
  - /proc/pid/oom_score_adj (since Linux 2.6.36)
- This file can be used to adjust the badness heuristic used to select which
      process gets killed in out-of-memory conditions.
  
  - The badness heuristic assigns a value to each candidate task ranging from
      0 (never kill) to 1000 (always kill) to determine which process is
      targeted. The units are roughly a proportion along that range of allowed
      memory the process may allocate from, based on an estimation of its
      current memory and swap use. For example, if a task is using all allowed
      memory, its badness score will be 1000. If it is using half of its allowed
      memory, its score will be 500.
- There is an additional factor included in the badness score: root
      processes are given 3% extra memory over other tasks.
- The amount of "allowed" memory depends on the context in which
      the OOM-killer was called. If it is due to the memory assigned to the
      allocating task's cpuset being exhausted, the allowed memory represents
      the set of mems assigned to that cpuset (see cpuset(7)). If it is
      due to a mempolicy's node(s) being exhausted, the allowed memory
      represents the set of mempolicy nodes. If it is due to a memory limit (or
      swap limit) being reached, the allowed memory is that configured limit.
      Finally, if it is due to the entire system being out of memory, the
      allowed memory represents all allocatable resources.
- The value of oom_score_adj is added to the badness score before it
      is used to determine which task to kill. Acceptable values range from
      -1000 (OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows user
      space to control the preference for OOM-killing, ranging from always
      preferring a certain task or completely disabling it from OOM-killing. The
      lowest possible value, -1000, is equivalent to disabling OOM-killing
      entirely for that task, since it will always report a badness score of
    0.
- Consequently, it is very simple for user space to define the amount of
      memory to consider for each task. Setting an oom_score_adj value of
      +500, for example, is roughly equivalent to allowing the remainder of
      tasks sharing the same system, cpuset, mempolicy, or memory controller
      resources to use at least 50% more memory. A value of -500, on the other
      hand, would be roughly equivalent to discounting 50% of the task's allowed
      memory from being considered as scoring against the task.
- For backward compatibility with previous kernels,
      /proc/pid/oom_adj can still be used to tune the badness
      score. Its value is scaled linearly with oom_score_adj.
- Writing to /proc/pid/oom_score_adj or
      /proc/pid/oom_adj will change the other with its scaled
      value.
- The choom(1) program provides a command-line interface for
      adjusting the oom_score_adj value of a running process or a newly
      executed command.
HISTORY¶
  - /proc/pid/oom_adj (since Linux 2.6.11)
- This file can be used to adjust the score used to select which process
      should be killed in an out-of-memory (OOM) situation. The kernel uses this
      value for a bit-shift operation of the process's oom_score value:
      valid values are in the range -16 to +15, plus the special value -17,
      which disables OOM-killing altogether for this process. A positive score
      increases the likelihood of this process being killed by the OOM-killer; a
      negative score decreases the likelihood.
  
  - The default value for this file is 0; a new process inherits its parent's
      oom_adj setting. A process must be privileged
      (CAP_SYS_RESOURCE) to update this file, although a process can
      always increase its own oom_adj setting (since Linux 2.6.20).
- Since Linux 2.6.36, use of this file is deprecated in favor of
      /proc/pid/oom_score_adj, and finally removed in Linux
    3.7.