Tanpa malu-malu menyalin/menempel jawaban saya dari serverfault beberapa hari yang lalu :-)
Sistem memori virtual linux tidak sesederhana itu. Anda tidak bisa hanya menjumlahkan semua bidang RSS dan mendapatkan nilai yang dilaporkan used
oleh free
. Ada banyak alasan untuk ini, tetapi saya akan membahas beberapa alasan terbesar.
-
Saat proses bercabang, induk dan anak akan ditampilkan dengan RSS yang sama. Namun linux menggunakan copy-on-write sehingga kedua proses benar-benar menggunakan memori yang sama. Hanya ketika salah satu proses memodifikasi memori, itu akan benar-benar digandakan.
Ini akan menyebabkanfree
angka menjadi lebih kecil daritop
Jumlah RSS. -
Nilai RSS tidak menyertakan memori bersama. Karena memori bersama tidak dimiliki oleh satu proses,
top
tidak memasukkannya ke dalam RSS.
Ini akan menyebabkanfree
angka menjadi lebih besar daritop
Jumlah RSS.
Jika Anda mencari nomor memori yang bertambah, lihat smem:
smem adalah alat yang dapat memberikan banyak laporan tentang penggunaan memori pada sistem Linux. Tidak seperti alat yang ada, smem dapat melaporkan ukuran set proporsional (PSS), yang merupakan representasi yang lebih berarti dari jumlah memori yang digunakan oleh pustaka dan aplikasi dalam sistem memori virtual.
Karena sebagian besar memori fisik biasanya digunakan bersama di antara beberapa aplikasi, ukuran standar penggunaan memori yang dikenal sebagai ukuran tetap penduduk (RSS) akan secara signifikan melebih-lebihkan penggunaan memori. Sebaliknya, PSS mengukur "bagian yang adil" setiap aplikasi dari setiap area yang dibagikan untuk memberikan ukuran yang realistis.
Misalnya di sini:
# smem -t
PID User Command Swap USS PSS RSS
...
10593 root /usr/lib/chromium-browser/c 0 22868 26439 49364
11500 root /usr/lib/chromium-browser/c 0 22612 26486 49732
10474 browser /usr/lib/chromium-browser/c 0 39232 43806 61560
7777 user /usr/lib/thunderbird/thunde 0 89652 91118 102756
-------------------------------------------------------------------------------
118 4 40364 594228 653873 1153092
Jadi PSS
adalah kolom yang menarik di sini karena memperhitungkan memori bersama.
Tidak seperti RSS
itu berarti untuk menambahkannya. Kami mendapatkan total 654Mb untuk proses userland di sini.
Keluaran seluruh sistem memberi tahu tentang sisanya:
# smem -tw
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 345784 297092 48692
userspace memory 654056 181076 472980
free memory 15828 15828 0
----------------------------------------------------------
1015668 493996 521672
Jadi 1Gb total RAM =654Mb proses userland + 346Mb kernel mem + 16Mb gratis
(beri atau ambil beberapa Mb)
Secara keseluruhan, sekitar setengah dari memori digunakan untuk cache (494Mb).
Pertanyaan bonus :apa itu cache userland vs cache kernel di sini ?
btw untuk sesuatu yang visual coba:
# smem --pie=name
Alat yang sangat bagus adalah pmap
yang mencantumkan penggunaan memori saat ini untuk proses tertentu:
pmap -d PID
Untuk informasi lebih lanjut tentang hal itu lihat halaman manual man pmap
dan lihat juga 20 Alat Pemantau Sistem Linux yang Harus Diketahui Setiap SysAdmin, daftar alat hebat yang selalu saya gunakan untuk mendapatkan informasi tentang kotak Linux saya.