Сохранять доступность системы в случае замораживания

Мы запускаем небольшой сервер (Ubuntu 14.04) исключительно для вычислительных целей. Время от времени пользователю удастся потреблять достаточно памяти, чтобы заморозить систему. В прошлый раз виновником был процесс, который породил 30 подэлементов питания. В результате я не могу войти в систему, чтобы исправить ее – ssh и локальный логин, и просто время ожидания. OOM Killer, похоже, ничего не сделал. egrep -i 'killed process' /var/log/* ничего не возвращает.

Есть ли способ сохранить / получить доступ к командной строке при таких обстоятельствах?

    2 Solutions collect form web for “Сохранять доступность системы в случае замораживания”

    Существует способ ограничения использования системных ресурсов.
    Проверьте команду ulimit и ее использование. У него есть conf file limits.conf где вы можете указать, какие группы могут иметь сколько ресурсов. Например, если вы укажете в файле conf:

     @developers soft nproc 20 @developers hard nproc 30 

    то группа developers может иметь только 30 процессов, и они получат предупреждение при достижении 20. Вы также можете ограничить количество процессов глобально с помощью ulimit -u 10 – в этом случае пользователи могут запускать 10 процессов.

    Используйте ulimit -a для отображения текущих ограничений. Чтобы ограничить память, попробуйте использовать ulimit -v .

     user@localhost:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 256646 max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 32768 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 32768 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 

    Вы можете сделать что-то, чтобы попытаться предотвратить это, как упоминает мазз в своем ответе. Но чтобы вернуть коробку из любой ситуации, даже те, которых вы не ожидаете, вы хотите, чтобы сторожевой таймер.

    В Linux сторожевой таймер – это процесс, который периодически отправляет «ping», и если этот «пинг» не получен, система сбрасывается. Когда я говорю «ping», я не имею в виду это как сетевой ICMP-запрос эха, а просто сообщение «эй, я все еще жив». Пинг может быть отправлен на физический сторожевой таймер, который может сделать что-то вроде силового цикла для хоста для выполнения сброса, но он также может быть чем-то в ядре linux. Последнее то, что вы, скорее всего, захотите, так как аппаратные сторожевые устройства, как правило, находятся только в оборудовании корпоративного уровня.

    В любом случае, чтобы начать работу, сначала необходимо включить сторожевой таймер в вашем ядре. Это, вероятно, будет самым большим препятствием. Я понятия не имею, есть ли у ubuntu сторожевой таймер или нет. Посмотрите, есть ли у вас /dev/watchdog . Если нет, попробуйте modprobe softdog . Если ни один из них не работает, и вы все еще хотите продолжить это, вам понадобится перекомпилировать ваше ядро ​​с SOFT_WATCHDOG опции SOFT_WATCHDOG .

    Теперь, если вы включили сторожевой таймер, вам необходимо установить пакет сторожевого таймера .

    После того, как он установлен, поместите скрипт в /etc/watchdog.d который вы хотите использовать для выполнения проверки работоспособности (также можете использовать test-binary в watchdog.conf ) и сделать его исполняемым. Если вы хотите убедиться, что ssh является функциональным, вы можете сделать что-то вроде:

     #!/bin/bash case "$1" in test) ssh testuser@localhost /bin/true ;; repair) service ssh restart ;; *) false ;; esac 

    (Чтобы сделать то же, что указано выше, вам нужно создать testuser и настроить открытый ключ auth, но это выходит за рамки этого ответа)

    Сторожевой таймер вызовет скрипт с test чтобы выполнить проверку работоспособности, и попытается выполнить repair если он не сработает. Если ремонт также не удался, система сбрасывается.

    Дополнительную информацию см. В документации сторожевого таймера .

    Linux и Unix - лучшая ОС в мире.