Ya, VSZ adalah memori virtual. Mengenai RLIMIT_AS, di mana Anda menemukan paragraf yang dikutip di atas? Karena setrlimit(2) adalah panggilan sistem Linux, saya tidak melihat bagaimana mungkin memonitor malloc(3), sebuah fungsi perpustakaan. Sebagai gantinya, ini hanya dapat bekerja dengan brk(2), sbrk(2), dan mmap(2) -- ini juga yang disarankan oleh halaman manualnya (diperiksa dari Scientific Linux). Namun, jumlah total memori yang diminta melalui fungsi ini adalah memori virtual, jadi RLIMIT_AS memang membatasi memori virtual. (Sekali lagi, ini sesuai dengan halaman manual setrlimit(2).)
Sayangnya, Anda tidak dapat membatasi RSS di Linux (ini adalah ulimit -m
). Anda dapat mencoba ulimit -d
(RLIMIT_DATA), tetapi ini hanya mencakup mmap(2) sejak Linux 4.7, biasanya digunakan untuk alokasi besar. Kemungkinan lain adalah membatasi memori virtual, tetapi dengan perbedaan besar antara RSS dan VSZ, ini mungkin sulit.
Banyak proses berbagi sebagian memorinya dengan proses lain, mis. libc digunakan oleh hampir setiap proses tetapi hanya dipetakan dalam memori satu kali, tetapi diperhitungkan dalam penggunaan memori virtual dari setiap proses. Membatasi penggunaan memori yang hanya digunakan oleh proses tertentu (kebanyakan RSS) dapat dilakukan dengan menggunakan cgroups. Lihat jawaban untuk Bagaimana membatasi total sumber daya (memori) dari suatu proses dan turunannya untuk mengetahui cara melakukannya. Ini akan membatasi total memori proses dan turunannya.