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

В списке рассылки разработчиков ядра Linux поднята проблема с обработкой ситуации исчерпания свободной памяти в Linux:

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

Шаги:

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

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

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

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

В комментариях на Reddit некоторые пользователи предлагают включить swap, но это не решает проблему, а только её отодвигает и часто усугубляет. В качестве возможного решения в будущем может быть привлечена появившаяся в ядре 4.20 и улучшенная в ядре 5.2 подсистема PSI (Pressure Stall Information), которая позволяет анализировать информацию о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод). Данная подсистема даёт возможность организовать отслеживание нехватки памяти на ранней стадии, определять источник проблем и завершать неважные приложения, не доводя до появления заметных пользователю эффектов.

Источник: opennet.ru

Добавить комментарий