Проблема такая
Есть программа, которой требуется, допустим, 400 MiB оперативки.
free выдает следующее:
total used free shared buffers cached
Mem: 1.0G 654M 345M 0B 19M 253M
-/+ buffers/cache: 381M 619M
Swap: 1.0G 400K 1.0G
Теоретически, процесс их может получить, и даже больше, но выпадает с OOM, просто после malloc'a, когда по идее, он реальной памяти не получит, только виртуальную (ту, что в колонке VIRT top'а, а не RES).
Кроме того, падают тяжелые процессы (например, хромиум, если открыть много вкладок).
В ulimits стоит virtual memory — unlimited.
Куда копать?