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

На моей машине 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

    xdotool: как искать окно по названию и классу с разными шаблонами (аналогично AutoHotkey)

    Как подключить файл NRG в Linux?

    Установка centos и freebsd с последовательной консолью

    Как захватить самое старое непрочитанное сообщение из `mail` в скрипте?

    vim – Храните резервную копию перед каждой записью

    Как я могу записать диск io на каждый процесс с течением времени

    Применить заданные шаблоны исключения rsync в заданной директории

    Запуск приложения как root во время загрузки на Ubuntu 14.04

    Распечатайте строку в stdout, которая соответствует выражению, если вывод содержит другое выражение

    Разница в использовании между файлами устройств, ioctl, sysfs, netlink

    Подключение к Интернету Kali Linux

    cpulimit в скрипте bash, который запускает другие команды

    Defrag range ioctl не поддерживается в этом ядре, попробуйте без каких-либо опций

    Среднее значение средней нагрузки: какие процессы ждут в очереди?

    Как связать несколько файлов с помощью tail -0f в Linux / AIX

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