Earlyoom

Earlyoom — это утилита, с помощью которой мы можем настроить экстренное завершение процесса, потребляющего больше всего памяти в системе. При этом, мы можем указать при каком количестве доступной RAM earlyoom будет срабатывать.

Устанавливаем утилиту, забрав её с Github’а:

# yum instal gcc make git
# git clone https://github.com/rfjakob/earlyoom.git
# cd earlyoom/
# make
# make install

Теперь мы можем просто запустить earlyoom, передав ему нужные параметры — например, доступное количество памяти и свопа в процентах или кибибайтах (KiB), при котором нужно сработать и убить процесс. Использовать для работы собственный или системный oom killer. Нужно ли игнорировать значения oom_score_adj и т. д.

# earlyoom -m 15

Для того что бы запускать утилиту как сервис, скопируем идущий в комплекте юнит в /etc/systemd/system/:

# cp earlyoom.service /etc/systemd/system/
# systemctl daemon-reload
# systemctl restart earlyoom

Для проверки работы earlyoom, создадим в системе процесс, который будет потреблять память, и дадим утилите убить его по мере достижения заранее заданных параметров. Создаём процесс, например так:

# yes | tr \\n x | head -c $((1024*1024*1024)) | pv -L $((1024*1024)) | grep n
 15MiB 0:00:15 [ 1MiB/s] [ <=> ]

Далее, в соседнем окне запускаем earlyoom:

# earlyoom -m 60
earlyoom v0.12-5-gd31a652
mem total: 488 MiB, min: 293 MiB (60 %)
swap total: 0 MiB, min: 0 MiB (10 %)
mem avail: 364 MiB (74 %), swap free: 0 MiB (0 %)
mem avail: 363 MiB (74 %), swap free: 0 MiB (0 %)
...
mem avail: 303 MiB (62 %), swap free: 0 MiB (0 %)
Out of memory! avail: 254 MiB < min: 293 MiB
Killing process 11526 (grep)
mem avail: 373 MiB (76 %), swap free: 0 MiB (0 %)
mem avail: 373 MiB (76 %), swap free: 0 MiB (0 %)

Ждём некоторое время и видим, как запущенный нами процесс был убит, а память вновь освобождена.

@SysadminNotes | https://sysadmin.pm

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *