Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Отображение экрана нехватки памяти в системе под управлением Linux Mint 9 (ядро 2.6.32)

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

История [ править ]

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

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

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

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

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

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

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

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

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

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

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Linux OOM Killer
  • Обработка нехватки памяти
  • Статья Грега Нахимовского « Минимизация использования памяти для создания подпроцессов приложений »
  • Статья Голдвина Родригеса « Укрощение убийцы OOM »
  • Статья Муляди Сантоза « Когда у Linux заканчивается память »
  • Статья Джона Бойленда « Работа с ошибками « нехватки памяти » »