(Mungkin agak terlambat untuk OP, tapi ini cukup sering ditanyakan, jadi saya akan mencobanya)
free
biasanya menunjukkan sesuatu seperti ini:
total used free shared buffers cached
Mem: 8195284 8137708 57576 0 1232328 2651156
-/+ buffers/cache: 4254224 3941060
Swap: 18892216 759852 18132364
Orang cenderung melihat Mem:
baris ketika mencoba untuk mengetahui berapa banyak memori bebas yang mereka miliki. Sayangnya kalimat itu cukup menyesatkan, karena kernel Linux mencoba memanfaatkan memori yang tersedia secara optimal dengan (setidaknya) cara berikut:
-
Ini akan meng-cache data dari subsistem I/O (misalnya disk), sehingga akan tersedia jika diperlukan.
-
Ini akan secara aktif mengusir proses yang tidak aktif selama beberapa waktu ke ruang swap, mendukung data caching untuk proses aktif. Ini cenderung mendukung throughput daripada daya tanggap, sehingga beberapa orang menyetel kernel mereka untuk mengubah perilaku ini.
Poin pertama adalah sumber kebingungan tentang free
, karena Mem:
baris termasuk memori yang digunakan untuk caching dalam jumlah memori yang digunakan. Kernel, bagaimanapun, akan melakukan cache sebanyak mungkin untuk alasan kinerja. Faktanya, pada sistem Linux mana pun yang telah aktif selama beberapa waktu, memori bebas cenderung mendekati nol - memori yang tidak terpakai adalah memori yang terbuang sia-sia.
Namun, memori cache dapat dibebaskan oleh kernel jika diperlukan oleh proses lain. Meskipun akan memengaruhi kinerja I/O sampai tingkat tertentu, proses lain dapat memiliki lebih banyak memori tanpa menggunakan ruang swap . Oleh karena itu, untuk sebagian besar maksud dan tujuan, memori itu gratis .
Itu sebabnya free
menyertakan baris kedua, di mana memori cache dianggap gratis:
-/+ buffers/cache: 4254224 3941060
Baris kedua inilah yang harus dilihat orang saat mereka ingin tahu apakah mereka memiliki cukup memori bebas untuk tujuan tertentu.
Pada contoh di atas, sesuai dengan Mem:
baris ada ~57 MB memori bebas. Namun, jika seseorang membaca baris kedua, sebenarnya ada sekitar 3,9 GB yang dapat digunakan tanpa memaksa proses aktif untuk bertukar. Sebagai catatan samping, ada juga sekitar 760 MB data yang jarang digunakan yang telah ditukar, untuk memberikan lebih banyak ruang di memori utama untuk proses dan penyimpanan cache.
Kira-kira pada waktu yang sama, isi /proc/meminfo
:
MemTotal: 8195284 kB
MemFree: 57660 kB
Buffers: 1232352 kB
Cached: 2651156 kB
SwapCached: 119936 kB
.
.
.
MemTotal
:memori fisik yang tersedia yang terdeteksi oleh kernel.
MemFree
:memori fisik yang tidak digunakan - memori kosong yang ditampilkan di Mem:
baris free
.
Buffers
:penyimpanan blok disk mentah yang relatif sementara.
Cached
:cache dalam memori untuk file yang dibaca dari disk. Itu tidak termasuk memori SwapCached.
SwapCached
:memori yang pernah ditukar, lalu ditukar kembali tetapi masih dalam ruang swap. Jika perlu, kontennya dapat dibuang begitu saja (sangat cepat!), tanpa harus menukarnya (lebih lambat).
Jadi, untuk mendapatkan perkiraan semi-akurat dari memori yang sebenarnya tersedia
MemFree + Buffers + Cached + SwapCached
adalah titik awal yang baik - dan yang free
tampil di baris kedua itu.
Secara alami, manajemen memori dan statistik serta pengukuran terkait lebih rumit dari ini. Angka yang ditunjukkan oleh free
hanyalah perkiraan terbaik, karena ada banyak variabel lain yang harus diperhitungkan jika Anda ingin masuk lebih dalam. Bagi orang yang rutin melakukan pengoptimalan penggunaan memori, ini hampir merupakan suatu bentuk seni.
EDIT:
Tautan yang agak lucu tentang "masalah" ini:
http://www.linuxatemyram.com/
EDIT 2:
Untuk mengonfirmasi komentar tentang analisis penggunaan memori yang hampir menjadi bentuk seni:
Bahkan free
melewatkan sebagian besar data cache pada sistem Linux modern. Dari /proc/meminfo
di sistem saya:
SReclaimable: 2253576 kB
Itu sekitar 2GB memori yang digunakan oleh pengalokasi slab sistem untuk menyimpan entri direktori dan semacamnya dan dapat diklaim ulang (yaitu dapat dihapus dan digunakan oleh proses jika perlu). Namun free
tidak menganggapnya memori cache dan tidak memasukkannya dalam kalkulasi apa pun dan oleh karena itu muncul sebagai memori yang digunakan.
slabtop
utilitas, jika tersedia, memungkinkan administrator sistem untuk mengetahui untuk apa cache slab digunakan.
Suatu cara (untuk pengguna root saja) untuk memiliki free
menunjukkan penggunaan memori sebenarnya dari sistem adalah sebagai berikut:
# swapoff -a
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free
total used free shared buffers cached
Mem: 8195284 3181468 5013816 0 8656 228832
-/+ buffers/cache: 2943980 5251304
Swap: 0 0 0
# swapon -a
Perintah pertama menonaktifkan ruang swap. Seharusnya tidak dikeluarkan jika memori yang tersedia mungkin tidak cukup untuk menampung data yang telah ditukar - dalam hal ini kita harus memperhitungkan Swap:
garis bebas dalam perhitungan penggunaan memori mereka.
Perintah kedua mendorong semua data buffer ke disk. Ini memungkinkan lebih banyak memori cache dibebaskan pada langkah berikutnya.
Perintah ketiga adalah yang paling penting dari set - ini memaksa kernel untuk membuang sebanyak mungkin data yang di-cache (cache halaman, entri direktori, inode, dll.).
Lalu free
akhirnya menunjukkan apa yang sebenarnya digunakan oleh proses yang sedang berjalan dalam -/+ buffers/cache:
garis. Sangat terlihat bahwa bahkan setelah membuang semua data yang di-cache, kernel dengan cepat mulai melakukan caching lagi - dalam hal ini sudah mencapai hampir 250 MB data yang di-cache dalam beberapa detik.
Perintah terakhir mengaktifkan ruang swap lagi - ini hanya diperlukan jika perintah pertama juga digunakan.
Perlu dicatat bahwa perintah ini harus dijalankan oleh pengguna root untuk mendapatkan hak istimewa yang diperlukan.