Вне свопа – Что происходит?

На моей машине debian VM с 512 МБ ОЗУ и 348 МБ Swap, что произойдет, если я открою 1 ГБ файл в редакторе и выйду из памяти?

Повредет ли система? Или, если нет, как linux справится с этим?

Разве было бы разумно установить Swapspace, поэтому при необходимости будет создано достаточно swap автоматически и динамически?

sudo apt-get install swapspace 

    2 Solutions collect form web for “Вне свопа – Что происходит?”

    Это зависит от настроек, с которыми вы работаете, в частности, overcommit памяти ( /proc/sys/vm/overcommit_memory , см. man 5 proc для деталей).

    Если перекомпонование памяти отключено, попытки редактора (и, возможно, другие программы, пытающиеся в то же время) выполнить выделение памяти, не удастся. Они получат результат отказа от системного вызова. Это зависит от каждой программы, чтобы справиться с этим, хотя, к сожалению, общий результат заключается в сбое программы. Редактор также может, например, просто отказаться от открытия файла.

    Если включено превышение памяти, тогда запрошенная память системного вызова может быть успешной. В этом случае, когда на самом деле обращается к памяти, ядро ​​заметит ее нехватку памяти и убьет процесс восстановления памяти. Этот процесс может быть или не быть редактором. Выбор определяется oom_score (результат нескольких эвристик ядра) и oom_score_adj (настроен) для каждого процесса в системе. Они также находятся в этой proc (5) manpage.

    В Linux есть огромная проблема, если вы подходите к состоянию из памяти – вы заметите, что вся ваша система становится полностью невосприимчивой, потому что она начинает много обмена. Даже ваш курсор мыши может стать настолько «медленным», что вы не можете запустить терминал и вручную уничтожить процесс заражения памяти. Это связано с огромным количеством операций с дисками. Чтобы избежать этой ситуации, я обычно обычно полностью отключаю swap, поэтому ядро ​​Linux всегда отзывчиво, и в худшем случае убийца oom (из памяти) убьет какой-то процесс. Логика, из которой процесс убивается oom, зависит от версии ядра.

    Так что ответ – нет – не включайте динамическое распределение подкачки, вы столкнетесь с зависанием машины.

    Это легко попробовать с помощью программы, которая просто постоянно выделяет некоторую память в цикле. Сохраните эту программу в текстовом файле memeater.c :

     #include <stdlib.h> int main() { for (;;) {char* mem=malloc(4096); mem[0]=1;}; } 

    Затем скомпилируйте его:

     $ gcc memeater.c -o memeater 

    и запустить:

     $ ./memeater 

    Попробуйте его с заменой, без обмена и с динамическим распределением подкачки.

    Кроме того, имейте в виду, что в большинстве случаев это условие происходит из-за ошибки в программном обеспечении (утечки памяти) или вы сделали что-то не так, как «загрузите этот 10Gb-файл в редакторе» или «запустите слишком много графических файлов, измените размеры параллельно» и выполните Вы хотите обменять или нет.

    Interesting Posts

    Не удается избавиться от вывода x11vnc

    Когда была введена замена процесса?

    Не удается запустить команду в виде www-данных, используя su

    Могут ли readahead-сервисы быть безопасно отключены?

    Флаг процесса 1: вилка, но не выполнялась (используйте случай?)

    Могут ли fstab опции uid и gid быть имя группы пользователей или они должны быть числовыми?

    Повторное добавление основного хранилища Debian к источникам

    «Полное пространство на диске» – Linux Mint как двойная загрузка в UEFI Windows

    Как определить успех программы при выполнении последовательности подобных задач?

    При открытии терминала не требуется логин?

    Поддержка Loop-устройства на самокомпилированном ядре не работает

    Когда вам нужно запустить команду lilo?

    Определить, какая программа заблокирована брандмауэром

    найти файлы в Linux с некоторыми исключениями

    Ошибки в менеджере обновлений Mint Linux

    Linux и Unix - лучшая ОС в мире.