Рубрики
Uncategorized

Выживание убийцы Linux OOM

Как OOM Killer освобождает память. Помечено Linux, DevOps, Tips, обучением.

Когда ваша машина Linux работает из памяти, Из памяти (OOM) убийцы называется ядром, чтобы освободить некоторую память. Он часто встречается на серверах, которые имеют ряд интенсивных процессов памяти. В этом посте мы немного глубже, когда позывается убийца OOM, как он решает, какой процесс убить, и если мы сможем предотвратить его уничтожение важных процессов, таких как базы данных.

Как убийца OOM выбирает какой процесс убить?

Ядро Linux дает счет к каждому процессу запущенного процесса oom_score Что показывает, насколько вероятно, что он должен быть прекращен в случае низкой доступной памяти. Оценка пропорциональна количеству памяти, используемой процессом. Оценка — 10 x процентов памяти, используемого процессом . Таким образом, максимальная оценка составляет 100% х. Кроме того, если процесс работает как Привилегированный пользователь , это получает немного ниже oom_score по сравнению с тем же использованием памяти обычным пользовательским процессом. В более ранних версиях Linux (ядро V2.6.32) было более сложная эвристика, которая рассчитала этот счет.

oom_score. процесса можно найти в /proc каталог. Скажем, что идентификатор процесса (PID) вашего процесса 42, Cat/Proc/42/oom_score даст вам счет процесса.

Могу ли я обеспечить некоторые важные процессы не убиты OOM Killer?

Да! Убийца OOM Checks oom_score_adj. настроить его окончательный рассчитанный счет. Этот файл присутствует в /proc/$ pid/ooom_score_adj . Вы можете добавить большой отрицательный балл в этот файл, чтобы ваш процесс получил более низкий шанс быть выбранным и прекращенным убийцей OOM. oom_score_adj может варьироваться от -1000 до 1000. Если вы присваиваете -1000 к нему, он может использовать 100% память и до сих пор избежать прекращения убийца OOM. С другой стороны, если вы присваиваете 1000 к нему, ядро Linux сохранит убийство процесса, даже если он использует минимальную память.

Давайте вернемся к нашему процессу с PID 42. Вот как вы можете изменить его oom_score_adj. :

sudo echo -200 > /proc/42/oom_score_adj

Нам нужно сделать это как root пользователь или Sudo Поскольку Linux не позволяет нормальным пользователям уменьшить оценку OOM. Вы можете увеличить оценку OOM в качестве обычного пользователя без каких-либо специальных разрешений. E.G echo 100>/proc/42/ooom_score_adj

Есть также другой, менее мелкий балл называется oom_adj который варьируется от -16 до 15. Это похоже на oom_score_adj Отказ На самом деле, когда вы устанавливаете oom_score_adj. Ядро автоматически расширяет его и рассчитывает oom_adj. . oom_adj Имеет магическое значение -17, что указывает на то, что данный процесс никогда не должен быть убит убийцей OOM.

Показать оценки OOM всех запущенных процессов

Этот скрипт отображает оценку OOM и отрегулированную оценку OOM всех запущенных процессов, в порядке убывания OOM

#!/bin/bash
# Displays running processes in descending order of OOM score
printf 'PID\tOOM Score\tOOM Adj\tCommand\n'
while read -r pid comm; do [ -f /proc/$pid/oom_score ] && [ $(cat /proc/$pid/oom_score) != 0 ] && printf '%d\t%d\t\t%d\t%s\n' "$pid" "$(cat /proc/$pid/oom_score)" "$(cat /proc/$pid/oom_score_adj)" "$comm"; done < <(ps -e -o pid= -o comm=) | sort -k 2nr

Проверьте, были ли какие-либо ваши процессы были убитыми OOM

Самый простой способ — это Греп Ваши системные журналы. В убунту: Greep -i Kill/var/log/syslog Отказ Если процесс был убит, вы можете получить результаты, такие как My_Process вызывал OOM-KILLER:,

Предостережения регулировки оценок OOM

Помните, что OOM является симптомом большей проблемы — низкая доступная память. Лучший способ решить это либо увеличение доступной памяти (E.g лучшее оборудование) или перемещение некоторых программ на другие машины или путем уменьшения потребления памяти программ (например, выделяют меньше памяти).

Слишком много настроившись от корректируемого балла OOM, приведет к убийству случайных процессов и не способным свободным памятью.

использованная литература

  1. Proc человек страницы
  2. https://askubuntu.com/questions/60672/how-do-i-use-oom-score-adj/
  3. Прохождение на какую часть кода Linux называется
  4. Классика Статья LWN (немного датировано)
  5. Вызывая убийцу OOM вручную

Оригинал: «https://dev.to/rrampage/surviving-the-linux-oom-killer-2ki9»