Apa yang telah Anda /proc/sys/vm/overcommit_memory
atur? Dari dokumentasi kernel:
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.
Jadi jika Anda menggunakan 1 tidak ada perbedaan. Jika Anda menggunakan 2 dan tidak ada file swap linux maka tidak ada proses yang dapat mengalokasikan 512M memori (virtual). Hasilnya tidak jelas untuk 0.
Sunting: Dari http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit, inilah cara 0 berfungsi:
Heuristic overcommit berupaya menghitung berapa banyak memori yang dapat diberikan oleh sistem jika Anda mendapatkan kembali semua memori yang ada dan tidak ada proses lain yang menggunakan lebih banyak RAM daripada saat ini; jika Anda meminta lebih dari ini, alokasi Anda ditolak. Secara khusus, nomor 'memori bebas' teoretis dihitung dengan menambahkan ruang swap bebas, RAM bebas (kurang dari 1/32 jika Anda tidak melakukan root), dan semua ruang yang digunakan oleh cache buffer dan data kernel yang disatukan yang diberi label dapat diterima kembali (kurang beberapa halaman yang dipesan).
Jadi ia menggunakan swap dalam perhitungan juga. Secara umum saya akan mengikuti rekomendasi RHEL dari:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2