LINUX.ORG.RU
ФорумTalks

Линукс ядро не может мягко обрабатывать ситуации с нехваткой памяти

 , , ,


4

3

На Reddit уже почти полтысячи комментариев по поводу проблемы в Линукс ядре: оно не может мягко обрабатывать ситуации с нехваткой памяти.

Оригинальное сообщение в LKML:

Известен баг, который донимает множество людей на протяжении многих лет и который можно воспроизвести меньше, чем за несколько минут на последней версии ядра 5.2.6. Все параметры ядра установлены в значения по умолчанию.

Шаги:

1) Загружаемся с параметром mem=4G
2) Выключаем поддержку swap (sudo swapoff -a)
3) Запускаем любой веб браузер, например, Chrome/Chromium или/и Firefox
4) Начинаем открывать вкладки с сайтами и смотрим как уменьшается объём свободной памяти

Как только возникает ситуация, что новая вкладка требует больше оперативной памяти, чем доступно, система практически полностью зависает. Вы даже с трудом сможете двигать курсором мыши. Индикатор жёсткого диска будет моргать без остановки (мне не ясно почему). Вы не сможете запустить новые приложения или закрыть текущие запущенные.

Этот маленький кризис может продолжаться минуты или дольше. Я предполагаю, что система не так должна себя вести в этой ситуации. Я думаю, что что-то нужно сделать, чтобы избежать такие «зависания».

Я почти уверен, что можно поменять некоторые параметры sysctl, чтобы избежать подобную ситуацию, но что-то подсказывает, что это можно сделать по умолчанию для всех, потому что нетехнические пользователи, столкнувшись с такой проблемой, просто откажутся от использования Линукс и им будет не того, чтобы искать решения в Google.

В комментариях Reddit некоторые пользователи предлагают включить swap, но это не решает проблему, а только её отодвигает и часто усугубляет.

Подробности

Перемещено Shaman007 из linux-general

anonymous

Ответ на: комментарий от next_time

ЯННП, почему так происходит?

Я тут не эксперт, в чём дело.
Было бы понятно, давно бы поправили.

Когда начинается переливание из пустого в порожнее для ядра неочевидно, когда для юзера ситуация выглядит уже не очень.
ssdшечка пыхтит, reclaim движется, вроде молодцом: справляется с говнософтом на нищебродском конфиге.

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

В этом случае и своп не поможет. Система едва ворочается,

Вот про то и речь, что подобное поведение - неадекватно. Система должна не «едва ворочаться», а иметь небольшой резерв на UI, чтобы пользователь или OOMKiller мог прибить жирное приложение

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

Должна сообщить приложению, которое запрашивает больше памяти, чем есть, что все, приехали, памяти больше нет.

Легко:

sudo sysctl -w vm.overcommit_memory=2

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

собственно, тут нужно авторитарно-виндовое поведение

Решение давно озвучено: лимиты cgroups. Какое хочешь, такое и будет поведение.

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

Когда ты третий час обсчитываешь 3D модель

а потом вырубается электричество.

Длительный расчет обязан периодически делать запись состояния расчета на диск

cvs-255 ★★★★★
()

Что, бёрди опять пытается неумело вбросить в LKML?

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

А как она должна себя вести?

Как винда или macOS. Там при нехватки памяти колом всё не встаёт, как дистрибутивах Linux, в которых нужно «тюнить» эту ситуацию или доставлять какие-то костыли вроде earlyoom.

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

Чем именно и как поможет своп?
Даст сбросить туда анонимные страницы.
Появилась свободная память и код программы не пришлось выкидывать. Процессору есть чем заняться.

Всё ещё хуже. Сама запись в своп уже поставит раком систему и будет сложно понять повисла система или нет ещё.

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

Как винда или macOS. Там при нехватки памяти колом всё не встаёт

Да неужели. macOS ещё туда-сюда, хотя пустые диалоги и прочее забавляют, но вот с вендой при нехватке памяти вообще ничего невозможно сделать - только hard reset.

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

Да неужели. macOS ещё туда-сюда, хотя пустые диалоги и прочее забавляют, но вот с вендой при нехватке памяти вообще ничего невозможно сделать - только hard reset.

Что? macOS выдаст диалог со списком приложений для закрытия. Windows сохраняет отзывчивость - медленнную, но закрыть штатно можно.

А вот линукс просто раком встаёт, что ничего сделать нельзя совсем. Может, если подождать, то что-то произойдёт, но юольше полчаса я не пробовал.

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

Что? macOS выдаст диалог со списком приложений для закрытия.

Макось плюётся пустыми диалогами, до списка дело доходит через полчаса, если дождаться. И то, скорее всего не повезёт - список окажется пустым, или без названий элементов списка. :)

Windows сохраняет отзывчивость - медленнную, но закрыть штатно можно.

Это пока она ещё в свопе живёт, который отключить в ней невозможно. А вот когда она сожрёт всё место для свопа, вот тогда наступает полный звездец.

Если есть своп, то при таком же ужоре памяти как в винде, когда в ней уже всё аццки тормозит, в линуксе нет никаких заметных лагов, если только не переключаться между, например, хромом или фаерфоксом один из которых полностью в свопе оказался.

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

Stanson ★★★★★
()

Хаха

Время убивать

А меня еще пытались убедить, что это я кривой, а не линукс. Пока своими руками не исправил, так и было.

ЗЫ. Что интересно, сабж стабильно всплывает минимум раз в год.

Lordwind ★★★★★
()
Последнее исправление: Lordwind (всего исправлений: 1)
Ответ на: комментарий от greenman

SysRq

Ну ещё бы такие клавиши были бы.

А так CAPS lock перестаёт реагировать, судя по индикатору.

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

Макось плюётся пустыми диалогами, до списка дело доходит через полчаса, если дождаться. И то, скорее всего не повезёт - список окажется пустым, или без названий элементов списка. :)

Странная у тебя macOS. Ниразу такого не видел.

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

Ну ядро, не ядро.

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

Так что должна адекватно реагировать.

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

Тоже самое ядро будет весьма криво бить процессы, совершенно без оглядки на десктопную специфику.

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

Так что должна адекватно реагировать.

Адекватно это как?

Вот браузер всеми способами пытается сожрать всю память. Ядро ему говроит - нету 200Мб, иди в жопу. Вместо того, чтобы дебильные жабоскрипты поубивать и освободить пару гигабайт, браузер запрашивает 199Мб, 198Мб и т.д. пока не обломится что-нибудь.

Как ядру определять - браузер это запросил немеряно памяти, который можно прибить, или какая-нибудь полезная программа, которой действительно эта память нужна?

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

Кстати, свап не нужен.

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

tiinn ★★★★★
()

Да, без ручной настройки OOM-killer и swap жить тяжело. Шо поделать.

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

Как в macOS. Только не ту, которую ты написал. А которая у нормальных людей.

Нормально при достижении опеределнного лимита моментально высвечивается окно со списком приложений и рядом ОЗУ, которое они потребляют. «закрывай что-то, я дальше с этим богатством работать не буду».

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

Это хорошее решение для одной, заранее определённой системы. Ведь нет ничего сложного в том, чтобы зарезервировать участок оперативки для такой утилиты - её окошка, кнопочек и всего прочего. А как ты это сделаешь в Линуксе, с его зоопарком тулкитов и гуёв?

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

Нормально при достижении опеределнного лимита моментально высвечивается окно со списком приложений и рядом ОЗУ, которое они потребляют. «закрывай что-то, я дальше с этим богатством работать не буду».

Так это DEшные дела, ядро-то тут при чём?

На самом деле более правильное решение тут уже озвучивали - говнище типа браузеров запускать исключительно в cgroup c жёстким лимитом. А по уму - ещё и под отдельным юзером, чтоб не лазало куда не надо.

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

Ребята, вы меня ерундой не грузите. Я стратегией занимаюсь.(с) анекдот

Да и в линуксах даже и не пытаются эту проблему решать. Ибо какая разница... Там же компьютерные механики 🧰, у которых постоянно коньки мониторят ОЗУ и прочее...

Вот прям сейчас возьми дефолтный линукс Ubuntu или Fedora с GNOME. И грузи ОЗУ. Разве будет хотя бы предупреждение какое-то?

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 2)
Ответ на: комментарий от Stanson

более правильное решение тут уже озвучивали

Это не более правильное решение, а костыль из дерьма и палок в лучших традициях говноинженеров из НИИ, а-ля «у нашей машины на 120 кмч отваливаются колёса, так что ограничим скорость на 90 кмч, всем нормальным людям этого хватит»

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

Так это DEшные дела, ядро-то тут при чём?

При том, что чисто с верхнего уровня не получится управлять этим.

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

При том, что чисто с верхнего уровня не получится управлять этим.

В смысле? Запусти htop какой, что-ли, и хоть сейчас управляй. Тебе даже права не нужны, чтобы прибить браузер. DEшной приблуде всего-то надо собирать периодически ужор памяти и если сумма превышает некий предел рисовать окошко со списком и прибивать выбранное.

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

Оказывается, и такое вот есть

http://nsjail.com/

nsjail

What forms of isolation does it provide

  • Linux namespaces: UTS (hostname), MOUNT (chroot), PID (separate PID tree), IPC, NET (separate networking context), USER, CGROUPS
  • FS constraints: chroot(), pivot_root(), RO-remounting, custom /proc and tmpfs mount points
  • Resource limits (wall-time/CPU time limits, VM/mem address space limits, etc.)
  • Programmable seccomp-bpf syscall filters (through the kafel language)
  • Cloned and isolated Ethernet interfaces
  • Cgroups for memory and PID utilization control
greenman ★★★★★
()
Ответ на: комментарий от darkenshvein

надо дать возможность хотя бы настраивать этот выбор. то есть включать и выключать.

То есть острочка проблемы, если убивать особо некого?

ну всё равно же видно, кто жрёт чуть больше и с кого начинать Освенцим.

Угу. Уже 20 лет видно, но почему-то не видно.

kirk_johnson ★☆
()
Ответ на: комментарий от cvs-255

Длительный расчет обязан периодически делать запись состояния расчета на диск

Начинается вот это вот «это ваши программы плохие, перепишите».

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

приблуде всего-то надо собирать периодически

Ты надеюсь не программист?

Зря надеешься.

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

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

Это не более правильное решение, а костыль из дерьма и палок в лучших традициях говноинженеров из НИИ

Ты в курсе, что что строчишь этот камент через QoS канал твоего SOHO роутера, который шейпит трафик аналогично тому, как cgroups шейпит ресурсы компуктера?

Приятно же поскорее увидеть свой постинг на ЛОРе, пока торрент в фоне пытается выжрать всё?

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

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

ЗЫ: я фигею, жабомакаки вообще ничего не понимающие в программировании рассказывают что там в ядре чинить надо. :)

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

Только вот управление памятью это немножко сложнее, чем rate limit TCP/UDP потока. А так, конечно, то же самое, да.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от aidaho

Некорректная аналогия. В этом случае роутер бы не давал поднять скорость выше, скажем, 80 мбит при канале в сотню.

Deleted
()

их проблемы, нам игруням пофиг, мы поиграли, игру закрыли, комп выключили, ни одна игра в свап не залезла ниразу.

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

жабомакаки

Ну это предсказуемо 🤣

Посмотри мультфильм про Шрека, где было про «а мы уже приехали?».

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

Это не более правильное решение, а костыль из дерьма и палок в лучших традициях говноинженеров из НИИ, а-ля «у нашей машины на 120 кмч отваливаются колёса, так что ограничим скорость на 90 кмч, всем нормальным людям этого хватит»

Бгг. Ты ещё и в аналогии не умеешь. :)

Говноинженеры из НИИ написали убожище под названием браузер. Другие говноинженеры понаписали говновеба. Всё это написанное говноинженерами барахло намеренно сжирает всю доступную память. Есть два варианта использовать это говнище - заставить говноинженеров переписать своё вебдерьмо или не давать вебдерьму сожрать всю доступную память.

Аналогия с машиной будет такая - «Говноинженеры из НИИ Mozilla&Google сделали автомобиль, который при скорости больше 20км/ч мгновенно выжирает весь бензин из бака без всяких на то причин, поэтому приходится либо ограничивать поток топлива, либо ездить со скоростью не более 20км/ч»

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

Ну это предсказуемо

Это факт.

И да, мы конечно не узнаем, чем плох polling, используемый во всех без исключения тулзах для наблюдения за потребляемой памятью от top до всяких плазмоидов и как там в гноме оно называется.

Разумеется, если это писать на жабе, то оно будет тормозить и жрать память. Но ведь софт типа DE никто на жабе не пишет.

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

По-моему это писец. Если бы ты не был программистом, то вполне было бы простительно.

Хотя частое явление, которое я понять не могу.

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

По-моему это писец.

Существование жабы - это не писец, это жованый крот.

Хотя частое явление, которое я понять не могу.

На жабе можно только за деньги писать, причём только то, что сам использовать никогда не будешь. Вот и не любит никто ни жабу, ни жабомакак.

И всё-же, хочется узнать, чем плох polling, используемый во всех без исключения тулзах для наблюдения за потребляемой памятью от top до всяких плазмоидов и как там в гноме оно называется.

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

Там при нехватки памяти колом всё не встаёт,

мм, опять мифы админов виндосевера.

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

Говноинженеры из НИИ написали убожище под названием браузер. Другие говноинженеры понаписали говновеба.

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

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

По тому что оно отлично применимо в модели пассивного наблюдателя.

Для модели же наблюдателя за событием писец — уже плохо ложится.

Не, если бы мне такую задачу поставили, я бы сделал то же самое типа вышеупомянутого EarlyOOM (или как его там?). Но я бы делал, и прекрасно понимал бы, что это решение «ну как смог».

Обработать ситуацию ОЗУшного поноса оно не сможет (когда приложение прорвало). Ну и обратной стороной является сам периодический опрос (ака баланс потребляемого CPU против оперативного реагирования).

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

Некорректная аналогия. В этом случае роутер бы не давал поднять скорость выше, скажем, 80 мбит при канале в сотню.

И это называется... называется... лимит.

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

Но никаких лимитов нет, я запускаю торрент и он фигачит все 12 Мб/сек на 100-мегабитном канале.

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