Solusi 1:
Singkatnya:
-
Ukuran maya: adalah jumlah ruang alamat yang dikelola oleh suatu proses. Ruang alamat virtual berisi semua yang dapat diakses oleh proses melalui pointer (referensi alamat memori). Misalnya, jika program Anda mendapatkan akses ke framebuffer kartu video Anda, memori tersebut dipetakan ke ruang virtual proses dan menerima alamat yang disimpan ke pointer. File yang dipetakan memori dan pemetaan anonim juga diperhitungkan ke dalam ukuran ruang alamat virtual. Hampir semuanya dalam ukuran virtual. Jika Anda menjumlahkan ukuran semua rentang alamat yang tercantum di
/proc/<pid>/maps
, itu akan mengembalikan Anda kira-kira nilai yang sama dari ukuran virtual. -
Ukuran tempat tinggal: adalah jumlah memori yang secara khusus dimiliki oleh proses yang saat ini berada di memori. Artinya, jumlah memori yang tidak di swap. Perhatikan bahwa bagian dari proses dapat berada di memori swap bahkan saat proses sedang berjalan. Sistem operasi akan menarik wilayah ini dari swap saat proses mencoba mengaksesnya. Ini harus mencakup tumpukan, tumpukan semua utas, dan pemetaan pribadi lainnya. Jika Anda melihat
/proc/<pid>/maps
,[stack]
,[heap]
dan pemetaan anonim lainnya (yang tidak memiliki jalur file) ditukar atau diperhitungkan dalam ukuran penduduk. -
Ukuran bersama: adalah jumlah memori yang mungkin dimiliki oleh beberapa proses. Misalnya, jika Anda memiliki empat instance dari aplikasi yang sama yang dimuat di memori, Anda akan memiliki empat instance heap dan setidaknya empat tumpukan, satu untuk setiap proses (ini adalah memori residen), tetapi Anda hanya akan memiliki satu instance dari kode biner program dan pustakanya. Ini adalah ruang bersama. Tidak hanya itu termasuk kode biner program dan pustakanya, tetapi juga file lokalisasi, data program hanya-baca, segmen memori bersama SysV dan POSIX, semafor, dll... Jika Anda melihat di
/proc/<pid>/maps
, sebagian besar pemetaan yang terkait dengan pustaka dan file program dibagikan.
Perhatikan bahwa VIRT berisi penyatuan RSS dan SHR, dan akan selalu lebih besar dari salah satunya. Mungkin ada wilayah yang dianggap sebagai RSS dan SHR.
Solusi 2:
Di Juliano, jawab:
Perhatikan bahwa RSS + SHR <=VIRT, selalu.
Ini hanya salah.SHR berisi semua memori virtual yang dapat digunakan bersama dengan proses lain, dan RSS berisi semua memori secara fisik dalam RAM yang digunakan oleh proses tersebut.
Jadi, semua memori bersama yang saat ini ada di RAM dihitung baik di SHR maupun di RSS, jadi SHR + RSS tidak ada artinya karena dapat berisi jumlah duplikat.
Untuk membuat proses dengan RSS + SHR> VIRT, cukup mmap file besar (1GB), lalu baca seluruhnya:file mmaped akan dimuat dalam RAM, dan VIRT, SHR, dan RSS masing-masing akan sedikit lebih besar dari 1GB, jadi SHR + RSS> VIRT.