В этом случае в 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
Попробуйте это со свопом, без свопа и с вашим динамическим распределением свопа.
Кроме того, имейте в виду, что в большинстве случаев это условие OOM возникает из-за ошибки в программном обеспечении (утечка памяти) или из-за того, что вы сделали что-то неправильно, например «загрузили этот файл размером 10 ГБ в редактор» или «запустили слишком много графических файлов, изменяющих размеры файла параллельно» и выполните вывод: вам нужен своп или нет?