Опубликовано

OOom-Killer. Убийца сервера
Oom-Killer. Убийца сервера
Здравсвуйте начинающие и другие администраторы unix.

Речь в данной теме пойдет о oom-killer. Начал замечать, что по непонятной причине сервак падает, каждые 2 дня. При этом на серваке, кроме nrpe, nfs-server ничего не работает, наблюдается только большой траффик. Ядро стоит последнее, так же заметил, что при срабатывании oom-killer, то swap вообще не используется, а в логах Out of memory.

Перелазил весь инет. И вот нашел несколько рекомендаций:
echo 80 > /proc/sys/vm/overcommit_ratio
vm.overcommit_ratio — отвечает за уровень (в процентах) overcommit

echo 2 > /proc/sys/vm/overcommit_memory
vm.overcommit_memory — отвечает за стратегию overcommit.

Стратегии.

OVERCOMMIT_GUESS 0 — эвристический подход к распределению памяти. В нем выделяется столько памяти, сколько хочет процесс. Но в swap/res попадает только те страницы, которые используются этим процессом

OVERCOMMIT_ALWAYS 1 — overcommit памяти есть всегда. Использовать лучше с совсем кривыми приложениями

OVERCOMMIT_NEVER 2 — без overcommit. В этом случае допустимый объем пространства памяти будет total_swap + alowed, где alowed = total_ram * overcommit_ratio / 100

sysctl -w vm.oom_kill_allocating_task=1

/proc/sys/vm/oom_kill_allocating_task (c Linux 2.6.24)

Если стоит значение 0 — то oom_killer проходит по списку задач и убивает случайным образом задание
Если стоит значение отличное от 0 — то oom_killer убивает задачу, которой не хватает памяти

так же данный скрипт поможет Вам все же держать сервер в UP

#!/bin/sh

# oom_adjust.sh Out of Memory Killer (oom_killer) Priority Adjustment Script
# by Steve Kamerman , Jan 2011
# http://www.stevekamerman.com

OOM_ADJ_FILE=/etc/oom_adjust.conf

if [ ! -f $OOM_ADJ_FILE ]; then
echo "oom_adjust.sh: config file $OOM_ADJ_FILE was not found" >&2
exit 1
fi

echo "oom_adjust.sh is setting oom_killer priorities"
for LINE in `cat $OOM_ADJ_FILE | sed -e '/^[# \t].*/d' | sed -e '/^$/d' | sed -e 's/ /:/'`; do
NAME=`echo $LINE | cut -d":" -f1`
ADJ=`echo $LINE | cut -d":" -f2`
echo " Setting $NAME to $ADJ"
for PID in `pidof $NAME`; do
echo $PID;
echo $ADJ > /proc/$PID/oom_adj
done
done
exit 0

Сохраните файл под именем:
oom_adjust.sh и запускайте его например раз в сутки.. Я запускаю каждый час

Файл конфигурации /etc/oom_adjust.conf

# Adjust process oom_adj values so they are more or less likely to be killed in an oom event
# procname oom_adj

# Keep sshd ALIVE
sshd -17
nfsiod -17
nfsd4 -17
nfsd -17
snmpd 10
ntpd 10
rpc.mountd -17
nrpe 10
rpc.idmapd -17

«-» — Высокий приоритет процесса — убивать oom_killer будет его в последую очередь
«+» — Низкий приоритет процесса — убивать oom_killer будет его в первую очередь

Удачи Вам!

Share and Enjoy:
  • Мой Мир
  • Facebook
  • Twitter

Один комментарий для “Администрирование : Oom-Killer. Убийца сервера”

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