LINUX.ORG.RU
ФорумAdmin

Есть-ли жизнь после OOM?

 , , ,


0

2

Собственно есть система с «кучей памяти», есть в это памяти программы большие (десятки и сотни гигов ОЗУ) и маленькие (десятки и сотни метров ОЗУ). Большие программы, иногда, могут вызвать OOM (почему это отдельный вопрос, в данный момент он меня мало интересует), но OOM-killer убивает все подряд, и маленьким программам всегда достается (я вообще не понимаю почему на системе с более чем сотней Гб памяти OOM-killer убивает прогу, жрущую 100Мб, при том что все такие мелкие проги, совокупно, и 1% ОЗУ не занимают).

Собственно вопрос, можно-ли:

1. Как-то вообще запретить убивать ту или иную программу по OOM? (nice не выход)

2. Как-то обработать внутри программы OOM, прежде чем она будет убита? (банально сбросить какие-то данные на диск перед смертью)

3. Можно-ли убитую по OOM прогу как-то гарантированно перезапустить в автоматическом режиме? (Речь идет об Ubuntu 14.04, без systemd или как он там называется)

★★★★

Последнее исправление: RiseOfDeath (всего исправлений: 7)

1 совсем запретить - нет, но пояснить системе очередность убивания можно через /proc/<pid>/oom_score_adj + Documentation/filesystems/proc.txt

2 имхо - нет

3 init ?

vel ★★★★★
()

1. Уже ответили - это именно оно. 3. supervisord

blind_oracle ★★★★★
()
Ответ на: комментарий от vel

vel По поводу инита по подробнее можно?

blind_oracle А где гарантия, что OOM-killer не убьет supervisord ?

RiseOfDeath ★★★★
() автор топика

OOM не может убить init, значит, нужно настроить свой инит, чтобы он либо перезапускал саму программу, либо тот же supervisord

deadNightTiger ★★★★★
()

Судя по документации при oom_score_adj -1000 процесс должен быть исключен из алгоритма поиска жертвы для oom_killer'а.

Думаю на это стоит рассчитывать.

Как еще одна перезапускалка - monit. Там можно даже предупреждать такие ситуации типа если память использована на 90% делать рестарт процессу.

tugrik ★★
()
Ответ на: комментарий от tugrik

Хм... надо будет посмотреть в эту сторону.

RiseOfDeath ★★★★
() автор топика

По поводу 2. Я не совсем шарю в теме, но может есть вариант со вспомогательным демоном, который следит за тем что система приближается к активации OOM-killer и пока ещё есть ресурсы рассылает менее жёсткие сигналы, получив которые наиболее критичные и первые кандидаты под горячую руку OOM-killer-а могут проделать свою «предсметрную» обработку?

ados ★★★★★
()
Ответ на: комментарий от ados

Кстати идея интересная, только не демоном а тем же OOM, например ввести два параметра а не один, по превышению первого посылаем сигнал на завершение, по второму киляем, т.е. небольшая дельта. Но это так мысли вслух.

anc ★★★★★
()

OOM killer умеет запускать произвольный скрит то-ли после убийства процесса, то-ли даже вместо него. Этим скриптом можно заново запускать критический софт например.

Ещё помнится были какие-то разговоры про ограничение килера cgroup-ами, что-бы он убивал процессы только в той группе процесс из которой нехватило памяти, но это было из серии то-ли «ав от бы запилить», то-ли «а вот мы запилили, но в апстрим не закоммитили».

MrClon ★★★★★
()
sysctl -w vm.overcommit_ratio=100
sysctl -w vm.overcommit_memory=0
andreik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.