Недостаточно памяти - Out of memory

Отображение экрана нехватки памяти при работающей системе Linux Mint 9 (ядро 2.6.32)

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

История

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

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

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

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

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

Управление нехваткой памяти

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

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

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

Процесс, который превышает ограничение для каждого процесса и затем пытается выделить дополнительную память, столкнется с ошибкой. Например, Стандартная функция C для выделения памяти, маллок (), вернусь НОЛЬ и приложение с хорошим поведением должно справиться с этой ситуацией.

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

  1. ^ «Как настроить убийцу нехватки памяти в Linux». Получено 19 февраля 2015.
  2. ^ «К более предсказуемой и надежной обработке нехватки памяти [LWN.net]». lwn.net.
  3. ^ "Linux_4.6 - новички в ядре Linux". kernelnewbies.org.
  4. ^ "Linux_4.19 - новички в ядре Linux". kernelnewbies.org.

внешняя ссылка