Що ви /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 файли swap і не маєте жодного файлу Linux, жоден процес не зможе виділити 512M (віртуальної) пам'яті. Результат не зрозумілий для 0.
Редагувати: З http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit так працює 0:
Евристичні спроби перевиконання спроб визначити, скільки пам’яті може дати вам система, якби вона відновила всю пам'ять, яку могла, і жоден інший процес не використовував більше оперативної пам’яті, ніж зараз; якщо ви просите більше, ніж у цьому, у виділенні вам відмовляються. Зокрема, теоретичне число «вільної пам’яті» обчислюється шляхом додавання вільного простору підкачки, вільної оперативної пам’яті (менше 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