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
Ответ на: комментарий от KivApple

Почему нельзя так настроить систему, чтобы oom killer пришел до выкидывания неанонимных страниц памяти или же вовсе запретить их выкидывать? Раз сказали что свопа нет, значит нефиг свопить неанонимные страницы в исполняемые файлы приложений.

Это вопросы к Линусу.

Вангую, если так сделать, то весь интернет заполнится хоровым воплем «да склолько же этому вашему проклятому линуксу нужно памяти?!»
А может и не заполнится. Браузер будет убит OOM пока камент строчится %)

ПО требует память. Памяти нет. Приходится крутиться.

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

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

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

А што делать то? Всё кончилось: даже спички и соль.

Проблема с поздним приходом OOM, вполне реальна, ага.
Но это как жаловаться, что сапёрная лопатка плохо заточена.
Перед этим надо продать танк, потерять автомат и сломать нож.

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

Ну так что стоит решить проблему с поздним приходом OOM? Достаточно при отключённом свопе запретить сброс неанонимных страниц.

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

Вангую, если так сделать, то весь интернет заполнится хоровым воплем «да склолько же этому вашему проклятому линуксу нужно памяти?!» А может и не заполнится. Браузер будет убит OOM пока камент строчится %)

ДА! Только перед смертью браузер должен выдать сообщение «вы пытались открыть несуразно пузатый сайт, браузер будет прибит, жалуйтесь сайтостроителям». Народ наплюет на фейсбуки, все мировое сайтописание развернется в сторону минимализма. Вспомните Гейца - «640к должно хватить всем». Только эту фразу надо произносить не как предсказание, а угрожающим тоном. И вы поймете ее настоящий смысл.

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

ДА! Только перед смертью браузер должен выдать сообщение

Он не может.

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

Постом выше как раз писал об этом: в любой программе чуть сложнее консольного калькулятора невозможно адекватно отреагировать на отказ ОС в выделении памяти.


Джин вылез из бутылки и назад невпихуем.

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

Ой. Кто мешает проводить перед попыткой открытия окна или запуска программы проводить проверку наличия памяти в ответ на запрос о ее выделении. Причем это можно делать как средствами ОС, так и средствами самого запускаемого софта. Было бы желание. Просто все хотят впихнуть невпихуемое, надеясь, что ОС это разрулит как-то сама.

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

Ну так пишите же, пишите!

А то на словах выходит так, что те кто могут, не умеют.
А те кто умеют — то ли не хотят, то ли не могут.

Наверное заговор иллюминати производителей чипов DRAM.

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

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

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