Задать вопрос
xenon
@xenon
Too drunk to fsck

Можно ли в Linux запустить процесс при OOM?

Допустим сервер перегружен чем-то (мы знаем через мониторинг, что load average дикий, но больше, толком, ничего не знаем). Посмотреть через SSH не можем, т.к. залогиниться не получается. Либо сразу обывает соединение, либо устанавливается TCP соединение, но не дает баннера SSH даже за полчаса.

Очень обидная ситуация, так как сервер в общем-то работает, даже на простые HTTP запросы отвечает. Был бы ssh - все можно было бы разобраться и починить. (логин, ps, kill, kill, kill). Но его нет.

Ну семь бед - один ответ, хостер перегрузит. Но возникают вопросы.

Вопрос 1 - по какой именно причине не логинится SSH? Нет свободной памяти? (основная моя версия) Или процессора настолько не хватает? (но я полчаса ждал - так даже баннера от SSH не дождался)

Вопрос 2 (админский) - может быть есть какая-то возможность для этого, чтобы избежать этой проблемы в будущем? Теоретически, если SSH сразу себе лишние десять мегабайт на сервере зарезервирует под рут логин, и при логине их будет использовать - это бы сильно помогло. Может быть есть какой-то трюк для этого?

Вопрос 3 (программистский. актуален, если на 2 нет хорошего ответа) - а возможно ли это в Linux в принципе? Если наша программа (наш ssh демон или getty) запускает другую программу (шелл) и для этого ей нужно сколько-то памяти, то можем ли мы заранее ее занять, и к моменту запуска как-то указать, что можно ее использовать, чтобы шелл-процесс запустился гарантированно? Может быть (как извращенный трюк) сразу запускать bash (при запуске сервера) а при логине только коннектить как-то юзера и bash?
  • Вопрос задан
  • 397 просмотров
Подписаться 2 Сложный Комментировать
Решения вопроса 1
sim3x
@sim3x
1. Да, память. Если процесс жив, но долго отвечает - чаще всего проблема в дисковом io, а потом уже цпу.
Или сеть, или хитрый ддос
Но у вас может быть свой кейс

2. https://www.google.com.ua/search?q=oom+killer+excl...
https://backdrift.org/oom-killer-how-to-create-oom...

3. cgroups
https://superuser.com/questions/1026708/is-there-a...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
jamakasi666
@jamakasi666 Куратор тега Linux
Просто IT'шник.
Правильнее будет найти первоисточник проблемы, перегрузка сети\цп\озу\io. Дальше отталкиваться уже от нее. А если совсем правильно то найти это проблему, найти причину и устранить ее т.к. скорее всего она будет крыться в кривых конфигах.
Ответ написан
2 Запускать sshd с nice -19 ?
Вроде по умолчанию там 20.

Может быть (как извращенный трюк) сразу запускать bash (при запуске сервера) а при логине только коннектить как-то юзера и bash?

man screen
Ответ написан
@sirota
Kvm по идее спас бы ситуацию. На крайняк если виртуалка, то менеджер виртуалки. По хорошему настроить мониторинг с логами и уже копать там что является причиной.
Ответ написан
Комментировать
@ProFfeSsoRr
Сис.админ по Linux
Во-первых - сам oom настраивается, можно процессам задавать приоритеты для oom.
Во-вторых - высокий la, из-за которого всё тормозит, может быть по очень разным причинам. И вообще странно думать сразу в сторону oom - он бы наубивал там и всё стало б хорошо, а раз не становится - это уж скорее диск. Или что-то еще.
В-третьих (хотя на самом деле с этого надо начинать) - мониторинг настраивай. Хотя бы netdata поставь, это максимально быстро. Но лучше конечно на отдельный сервер Prometheus с Grafana, а на проблемный сервер соответственно node exporter и экспортеры для конкретных твоих приложений. Ну т.е. в общем случае задача решается мониторингом, опять же логи тоже чтобы отправлялись на другой сервер. А в мониторинге алерты, чтобы успеть среагировать на проблемы, когда они только-только начались.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Полностью согласен с ораторами насчет виртуализации.

По поводу ситуации что уже случилась. Скорее всего заход в баш вам ничего не даст. Т.к. любые команды что вы будете выполнять будут запускать процессы и вы будете снова и снова получать ту-же ситуацию что и с башом. Тоесть каким-то чудом зашли но ничего сделать толком нельзя.

Нужно 100% собрать логи и посмертные снимки памяти приложений. Или приложения. Скорее всего оно одно. И оно-же является источником проблемы. Это приложение надо перенести в докер к лимитами по памяти и там запускать.

Дампы памяти надо проанализировать и понять что флудит. С точки зрения приложения должны быть какие-то гарантии или требования по штатному режиму работы. Тоесть если ему надо 8Г то дайте ему ровно 8 и не больше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы