GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui apakah cukup memori yang tersedia untuk menerapkan aplikasi baru di mesin Linux?

(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.


Linux
  1. Cara Menghapus Buffer Memori dan Cache di Linux

  2. Cara Menghapus Cache Memori di Linux

  3. Cara Menambahkan Memori, vCPU, Hard Disk ke Mesin Virtual KVM Linux

  1. Bagaimana cara mencatat konsumsi memori di Linux?

  2. Bagaimana saya tahu jika mesin jarak jauh menggunakan Windows atau Linux?

  3. Bagaimana cara memindahkan RAID perangkat lunak Linux ke mesin baru?

  1. Cara menginstal aplikasi Spotify di Linux

  2. Cara mematikan atau me-reboot Linux

  3. Cara Menghitung Penggunaan Memori di Linux menggunakan sar, ps, dan gratis