Что вы /proc/sys/vm/overcommit_memory
установили? Из документации ядра:
0 - Heuristic overcommit handling. Obvious overcommits of
address space are refused. Used for a typical system. It
ensures a seriously wild allocation fails while allowing
overcommit to reduce swap usage. root is allowed to
allocate slightly more memory in this mode. This is the
default.
1 - Always overcommit. Appropriate for some scientific
applications.
2 - Don't overcommit. The total address space commit
for the system is not permitted to exceed swap + a
configurable percentage (default is 50) of physical RAM.
Depending on the percentage you use, in most situations
this means a process will not be killed while accessing
pages but will receive errors on memory allocation as
appropriate.
Таким образом, если вы используете 1, нет никакой разницы. Если вы используете 2 и нет файла подкачки Linux, то ни один процесс не сможет выделить 512 МБ (виртуальной) памяти. Результат не ясен для 0.
Редактировать: из http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit так работает 0:
Эвристический overcommit пытается определить, сколько памяти может дать система, если она освободит всю память, и ни один другой процесс не использует больше оперативной памяти, чем в настоящее время; Если вы просите больше, вам будет отказано в вашем распределении. В частности, теоретическое число «свободной памяти» рассчитывается путем сложения свободного пространства подкачки, свободной оперативной памяти (меньше 1/32, если вы не root) и всего пространства, используемого объединенным буферным кешем и данными ядра, которые помечены как исправимые (за исключением некоторых зарезервированных страниц).
Таким образом, он также использует своп в расчете. В общем, я бы следовал рекомендации RHEL:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2