Мне нужно запустить несколько тяжелых тестов памяти на удаленном компьютере через SSH. В прошлый раз, когда я это сделал, компьютер перестал отвечать, и потребовалось, чтобы кто-то физически перезагрузил его.
Есть ли способ настроить его так, чтобы система перезагружалась, а не зависала, если используется слишком много памяти? (У меня есть root-доступ). Версия ядра — 4.9.0.
решение1
Для мониторинга/восстановления управления «нестабильным»/неисправным сервером я бы посоветовал использовать аппаратное обеспечение или, в случае его отсутствия, программное обеспечение для наблюдения; в Debian вы можете установить его с помощью:
sudo apt-get install watchdog
Затем вы редактируете /etc/watchdog.conf
и добавляете пороговые значения или тесты; на мой взгляд, сторожевой таймер также активируется таким образом, что если ядро не видит его в течение длительного времени, оно перезагружается. Например, если программная процедура не взаимодействует с фиксированным временем /dev/watchdog0
или что-то в этом роде.
Например, вы можете определить пороговые значения нагрузки в /etc/watchdog.conf
:
max-load-1 = 40
max-load-5 = 18
max-load-15 = 12
Также имейте в виду, что некоторые платы/чипсеты поставляются со встроенными сторожевыми таймерами; если я не ошибаюсь, Arm A20 — один из них.
Ядро Linux может сбросить систему, если обнаружены серьезные проблемы. Это может быть реализовано с помощью специального оборудования watchdog или с помощью немного менее надежного программного watchdog внутри ядра. В любом случае, должен быть демон, который сообщает ядру, что система работает нормально. Если демон перестает это делать, система сбрасывается.
watchdog — это такой демон. Он открывает /dev/watchdog и продолжает писать в него достаточно часто, чтобы не допустить сброса ядра, по крайней мере раз в минуту. Каждая запись откладывает время перезагрузки еще на минуту. После минуты бездействия аппаратное обеспечение watchdog вызовет сброс. В случае программного watchdog возможность перезагрузки будет зависеть от состояния машин и прерываний.
Демон сторожевого таймера можно остановить, не вызывая перезагрузки, если устройство /dev/watchdog закрыто правильно, если только ваше ядро не скомпилировано с включенной опцией CONFIG_WATCHDOG_NOWAYOUT.
смотрите такжеRaspberry Pi и Arduino: создание надежных систем с помощью сторожевых таймеров
решение2
Чтобы ответить на ваш конкретный вопрос, вы можете установить sysctls следующим образом:
vm.panic_on_oom=1
kernel.panic=10
таким образом, ядро впадет в панику, если в системе закончится память, а затем перезагрузится через десять секунд паники.
В новых системах с полной поддержкой cgroups2 systemd-oomd может оказаться менее радикальным вариантом.