Jump to content

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

Отображение экрана «Недостаточно памяти» в системе под управлением 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, пока не стало слишком поздно.

  • earlyoom[8]
  • nohang[9]
  • systemd-oomd
  • Исправления ядра PSI (информация о остановке давления) и сопутствующие oomd daemon, патчи объединены в ядро ​​Linux 4.20. [10] [11]

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

[ редактировать ]

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

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

  1. ^ «Полное руководство по обновлению Ram» . wincah.com . 2023.
  2. ^ Linux OOM-убийца
  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, 3 марта 2021 г. , дата обращения 7 марта 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: af7ec19ad5947e3f0b0c4155997ef531__1708783800
URL1:https://arc.ask3.ru/arc/aa/af/31/af7ec19ad5947e3f0b0c4155997ef531.html
Заголовок, (Title) документа по адресу, URL1:
Out of memory - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)