stringtranslate.com

Недостаточно памяти

Отображение экрана «Недостаточно памяти» в системе под управлением Linux Mint 9 (ядро 2.6.32)

Недостаток памяти ( OOM ) — это часто нежелательное состояние работы компьютера, при котором дополнительная память не может быть выделена для использования программами или операционной системой. Такая система не сможет загружать какие-либо дополнительные программы, а поскольку многие программы могут загружать в память дополнительные данные во время выполнения, они перестанут работать корректно. Обычно это происходит потому, что вся доступная память, включая пространство подкачки на диске , уже выделена.

История

Исторически состояние нехватки памяти было более распространенным, чем сейчас, поскольку ранние компьютеры и операционные системы были ограничены небольшими объемами физической оперативной памяти (ОЗУ) из-за неспособности ранних процессоров обращаться к большим объемам памяти. , а также соображения стоимости. Поскольку появление виртуальной памяти открыло возможности для использования пространства подкачки, это условие встречается реже. Почти все современные программы ожидают, что смогут свободно выделять и освобождать память во время выполнения, и имеют тенденцию давать неконтролируемые сбои (сбои), когда это ожидание не оправдывается; Старшие часто выделяли память только один раз, проверяли, достаточно ли у них для выполнения всей работы, а затем ожидали, что больше не будет. Таким образом, они либо сразу же выйдут из строя с сообщением об ошибке «недостаточно памяти» (OOME), либо будут работать должным образом. [ нужна цитата ]

Ранние операционные системы, такие как MS-DOS, не поддерживали многозадачность . Программам была выделена физическая память, которую они могли использовать по мере необходимости. Физическая память часто была дефицитным ресурсом, и когда она была исчерпана приложениями, например, с функцией резидентного завершения , дальнейшие приложения не могли быть запущены до тех пор, пока работающие приложения не были закрыты.

Современные операционные системы предоставляют виртуальную память, в которой процессам предоставляется определенный диапазон памяти, но эта память напрямую не соответствует фактической физической оперативной памяти. Виртуальная память может поддерживаться физической оперативной памятью, дисковым файлом через mmap (в производных Unix ) или MapViewOfFile (в Windows) или пространством подкачки, а операционная система может перемещать страницы виртуальной памяти по мере необходимости. Поскольку виртуальная память не нуждается в поддержке физической памяти, ее исчерпание происходит редко, и обычно существуют другие ограничения, налагаемые операционной системой на потребление ресурсов. [1]

Как и предсказывает закон Мура , объем физической памяти во всех компьютерах вырос почти в геометрической прогрессии, хотя это в некоторой степени компенсируется увеличением размеров самих программ и файлов. В некоторых случаях компьютеру с поддержкой виртуальной памяти, где большая часть загружаемых данных находится на жестком диске, может не хватать физической памяти, но не виртуальной памяти, что приводит к чрезмерному подкачиванию страниц . Это состояние, известное как тряска , обычно делает компьютер непригодным для использования до тех пор, пока некоторые программы не будут закрыты или компьютер не будет перезагружен. По этим причинам сообщение о нехватке памяти редко встречается в приложениях на современных компьютерах. [ нужна цитата ]

Однако на современном компьютере все еще можно столкнуться с состоянием OOM. Типичный случай OOM на современных компьютерах возникает, когда операционная система не может больше создавать виртуальную память, поскольку все ее потенциальные резервные устройства были заполнены или конечный пользователь отключил их. Это условие может возникнуть из-за копирования при записи после fork().

Восстановление

Ядра операционных систем, таких как Linux, попытаются восстановиться после этого типа состояния OOM, завершив один или несколько процессов, механизм, известный как OOM Killer . [2] [3] В Linux 4.6 (выпущенной в мае 2016 г.) внесены изменения в ситуации OOM, улучшающие обнаружение и надежность. [4] [5] Осведомленность о cgroup в OOM killer была реализована в ядре Linux 4.19, выпущенном в октябре 2018 года, что добавляет возможность уничтожать cgroup как единое целое. [6]

Из-за поздней активации OOM Killer в некоторых системах Linux [7] существует несколько демонов и патчей ядра, которые помогают восстановить память из состояния OOM, пока не стало слишком поздно.

Ограничения памяти для каждого процесса

Помимо общесистемных ограничений физической памяти, некоторые системы ограничивают объем памяти, который может использовать каждый процесс. Обычно это вопрос политики, такое ограничение также может произойти, когда ОС имеет большее адресное пространство, чем доступно на уровне процесса. Некоторые высокопроизводительные 32-разрядные системы (например, с включенным расширением физического адреса ) имеют 8 или более гигабайт системной памяти, хотя любой отдельный процесс может получить доступ только к 4 ГБ из нее в 32-разрядной модели плоской памяти .

Процесс, который превышает лимит для каждого процесса, а затем пытается выделить дополнительную память, столкнется с ошибкой. Например, стандартная функция C для выделения памяти malloc()вернёт NULL, и правильное приложение должно справиться с этой ситуацией.

Рекомендации

  1. ^ «Как обновить полное руководство Ram» . wincah.com . 2023.
  2. ^ Linux OOM Killer
  3. ^ «Как настроить Linux-убийцу нехватки памяти» . Проверено 19 февраля 2015 г.
  4. ^ «К более предсказуемой и надежной обработке нехватки памяти [LWN.net]» . lwn.net .
  5. ^ «Linux_4.6 — Новички в ядре Linux» . kernelnewbies.org .
  6. ^ «Linux_4.19 — Новички в ядре Linux» . kernelnewbies.org .
  7. ^ «Ядро Linux - Можно ли заставить убийцу OOM вмешаться раньше?». Супер пользователь . Проверено 7 марта 2021 г.
  8. ^ rfjakob (7 марта 2021 г.), rfjakob/earlyoom, GitHub , получено 7 марта 2021 г.
  9. Аврамов, Алексей (5 марта 2021 г.), hakavlad/nohang, GitHub , дата обращения 7 марта 2021 г.
  10. ^ "linux-psi.git - Показатели нагрузки на ресурсы Linux" . git.cmpxchg.org . Проверено 7 марта 2021 г.
  11. ^ facebookincubator/oomd, Facebook Incubator, 3 марта 2021 г. , получено 7 марта 2021 г.

Внешние ссылки