Я не уверен, имеет ли на OSX sshd реализация, но в некоторых системах, значение, когда у Вас нет tty, подразумеваемого корневого каталога с ~ / конвенция, может не расшириться, и можно получить некоторые неожиданные результаты. Я знаю, что это не решенный вопрос, но попробуйте именами полного пути вместо ~ / конструкция.
Это зависит от настроек, с которыми вы работаете, в частности, overcommit_memory (/proc/sys/vm/overcommit_memory
; подробности см. в man 5 proc
).
Если параметр overcommit_memory отключен, попытка редактора (и, возможно, других программ, пытающихся выделить память одновременно) не будет выполнена. Они получат отказ в результате системного вызова. С этим должна справиться каждая программа, хотя, к сожалению, общий результат - аварийное завершение работы программы. Редактор также может, например, просто отказаться открывать файл.
Если включен режим перекоса памяти, то системный вызов, запрашивающий память, вполне может завершиться успешно. В этом случае, при реальном обращении к памяти, кернел заметит её выход из памяти и убьёт процесс восстановления памяти. Этот процесс может быть или не быть редактором. Выбор регулируется oom_score
(результат эвристики нескольких процессов кернела) и oom_score_adj
(сконфигурирован) каждого процесса в системе. Они также присутствуют в этом управлении proc(5).
В Linux существует огромная проблема в том случае, если вы приближаетесь к состоянию вне памяти - вы заметите, что вся ваша система становится абсолютно невосприимчивой, потому что начинается много переключений. Даже курсор мыши может стать настолько "медленным", что Вы не сможете запустить терминал и убить обижающего пожирателя памяти вручную. Это происходит из-за огромного количества дисковых операций. Чтобы избежать этой ситуации, я обычно полностью отключаю подкачку, так что ядро 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Гб файл в редактор" или "запустите параллельно слишком много графических файлов", и сделайте вывод, нужно ли вам подкачивать или нет.