LINUX.ORG.RU
ФорумTalks

Есть ли хоть одна причина...

 ,


0

1

...по которой в 2017 году в линуксе нет штатного механизма ограничения минимального размера памяти, доступной для буферизации/кэширования, чтобы при ее исчерпании не приходилось черт знает сколько смотреть на unresponsive систему и ждать, пока процессы не попробуют использовать еще больше, вызвав срабатывание oom-killer, или не освободят занятую? Или я неправильно понимаю причины этого раздражающего явления?

Inb4: просто увеличь swap. Нет, я хочу, чтобы описанная ситуация была в принципе невозможной.

★★

Есть ли хоть одна причина...

Как минимум одна всегда найдется — причина в том, что ты это до сих пор не реализовал.

Deleted
()

Поставь стрекозу и не лезь к костылинуксу. Код oom killer в FreeBSD в разы длиннее и запутаннее. Это правда не тривиальная задача.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)

Наверное можно под себя ядро скомпилировать, жестко задав размеры для своей системы.

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

Поставь стрекозу и не лезь к костылинуксу.

А системд у ней есть?

Это правда не тривиальная задача.

Можно здесь подробнее?

shatsky ★★
() автор топика
Ответ на: комментарий от orm-i-auga

Как, ещё не было комментария про докупку памяти? Ну, значит, вот он!

Сколько памяти нужно купить, чтобы линукс вообще не мог застыть по упомянутой причине?

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

просто ты не знаешь таких магических слов как dirty_cache и zswap.

Deleted
()
Ответ на: комментарий от shatsky

О чём? Кеш по определению должен занимать всю свободную память. Его не нужно ограничивать. То, что ты наблюдаешь — либо косяки настройки параметров через sysctl, либо мистический баг, либо фича.

post-factum ★★★★★
()
Ответ на: комментарий от shatsky

Как работает своп линукса:
1. Память кончается.
2. Начинаем свопить.
Как работает своп у всех остальных систем:
1. Свопим всё.
2. Стараемся освободить максимум ОЗУ, даже если нет в этом необходимости.

Как работает шелдулер линукса:
https://www.opennet.ru/base/sys/linux_shedulers.txt.html
- если грубо, поделить ресурсы поровну по-очерди.
Как работает шедулер в FreeBSD: на основе эвристик придумать, каким процессам ресурсы нужнее.

Также и с ООМ.

В Linux всё это можно допилить разными параметрами до комфортных ощущений, но код всего этого хозяйства в других системах в разы больше и сложнее, что даже при fork бомбах позволяет системе мочить бомбу и давать шеллу запускаться. Но всем пофиг, фризы - это в данном контексте не баг, а фича.

Ещё можно почитать про треды M:N, которые идеологически более правильные, чем 1:1, но их осилил только автор стрекозы. К тормозам прямого отношения не имеют, но интересно.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 3)
Ответ на: комментарий от post-factum

У меня тоже «вешается» система, когда, например, firefox сжирает своп до предела. На ctrl-alt-F1 не реагирует, по ssh не подключиться. Приходится reisub'ом перезагружаться. А надо бы повесить OOM на какую-нибудь свободную букву sysreq'а (там же ещё не все заняты?).

То, что ты наблюдаешь — либо косяки настройки параметров через sysctl,

Всё по debian'овскому умолчанию.

либо мистический баг, либо фича.

Интересно, что это.

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

firefox сжирает своп до предела

Ну, ССЗБ. А если хочешь хороший OOM, иди кури LKML, его там последние полгода активно курочат.

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

Ты не понял вопрос. Я хочу ограничить снизу, зарезервировать минимальное количество памяти для кэша, чтобы оом срабатывал быстро. Сейчас перед срабатыванием оом система превращается в тыкву на неопределенное время. Насколько я понимаю, причина в том, что формально памяти еще хватает, но для кэша ее совсем не осталось, и ввод-вывод становится чудовищно медленным.

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

Как работает своп линукса

Неправда же, от /proc/sys/vm/swappiness зависит, по умолчанию начинает свопить при 40% занятой памяти

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

Да без разницы, всё равно на других принципах основано. Во фре в принципе чем больше ОЗУ - тем больше своп должен быть по инструкции. Не потому, что ОЗУ не хватает, а чтобы всегда было свободное место.

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

Причина точно в другом, и любые лимиты тут ущербны. Нужно брать последнее ванильное ядро, скриптовать надёжный репродьюсер и идти в LKML, иначе всё это пустые разговоры.

post-factum ★★★★★
()

Есть ли хоть одна причина, по которой в 2017 году

ты не можешь поставить 32 Гб озу?

ox55ff ★★★★★
()
Ответ на: комментарий от post-factum

firefox сжирает своп до предела

Ну, ССЗБ.

Это может быть и git gc --aggressive. И прочее. В том случае, когда работает долго, потребляет памяти, вроде, в нормальных пределах, а сидеть следить нет возможности.

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

О! Так он там уже есть. Надо будет разогреть огнелиса да проверить, не убьёт ли oom мне XServer вместо него.

gag ★★★★★
()
Ответ на: комментарий от post-factum

Нужно брать последнее ванильное ядро

А Debian не подойдёт?

скриптовать надёжный репродьюсер

Интересно, если взять и рандомом повызывать malloc + mem write / free, т.е. с фрагментированием занять почти всю память. А потом продолжать read / write и чуть-чуть malloc.

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

32 Гбайт? Всего-то на 4-ядерном проце (при 8 потоках) на некоторых репозиториях git gc --aggressive «повесит» ядро. А 64 не везде поставишь, да и будет уже очень дорого. Да и то, только до тех пор пока не поставишь 8-ядерный (16-поточный) райзен.

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)
Ответ на: комментарий от post-factum

Т.е. нужно не только ванильное ядро, а ещё и программка, использующая только сисколы вместо glibc, и прописанная в «init=» ядра? А ещё лучше только MacBook Air, который у Торвальдса или он его уже поменял?

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.