Anda mengalami masalah Linux Makan Ram Saya .
Jangan Panik.
Ini BUKAN masalah.
Sistem Anda Bekerja Sesuai Rancangan.
Masalahnya bukan OS Anda - masalahnya adalah pemahaman Anda tentang apa "bebas" memori itu.
Sistem Unix menggunakan memori untuk lebih dari sekedar menjalankan program. Memori dapat digunakan untuk:
- Menjalankan program (aktif / digunakan)
- Buffering data dalam perjalanan (buffer)
- Data cache baru saja dibaca dari / ditulis ke disk (cache)
- Sama sekali tidak ada (gratis)
Berikut ini adalah tur singkat (dan sebagian besar tidak lengkap) tentang bagaimana sistem Unix modern melaporkan penggunaan RAM.
Apa itu Memori bebas (definisi OS) ?
Ketika sistem Unix melaporkan RAM sebagai Gratis itu berarti "Saya tidak menggunakan RAM ini untuk apa pun".
Gratis RAM secara efektif berharga - Hal ini tidak membuat sistem anda lebih cepat, itu hanya duduk di sana menjadi "bebas" dalam kasus sesuatu membutuhkannya. Sesuatu itu bisa salah satu dari tiga item lain yang saya sebutkan di atas.
Apa itu memori Cache dan Buffer?
Memori cache dan Buffer adalah RAM yang digunakan sistem operasi untuk membuat sistem Anda lebih cepat.
Memori ini tidak diperlukan untuk menjalankan program sekarang , jadi OS Anda menggunakannya untuk menyimpan data yang sering dibutuhkan - misalnya pustaka C (dibutuhkan oleh hampir semua program yang Anda jalankan) hampir selalu tersimpan dalam cache
memori, sehingga sistem tidak harus pergi ke disk untuk menemukan instruksi yang diperlukan untuk mencetak "Hello World" di layar.
Ini sebenarnya jauh lebih rumit dari itu - ada memori bersama , memori kabel , dll - tetapi untuk tujuan kita penjelasan sederhana ini memadai.
Apa itu memori aktif?
Memori aktif adalah bagian dari yang kita pahami sebagai memori "bekas" - RAM yang digunakan aplikasi untuk apa pun yang mereka lakukan - mengurutkan spreadsheet, menyajikan halaman web, mengedit grafik, dll.
Memori "aktif" telah "aktif" baru-baru ini - - program yang mengklaim telah memanfaatkan isinya (membaca atau menulis), dan itu tidak dianggap sebagai kandidat yang baik untuk bertukar.
Apa itu memori tidak aktif?
Seperti memori Aktif, memori tidak aktif adalah RAM yang digunakan aplikasi untuk apa pun yang mereka lakukan. Perbedaannya adalah memori ini belum diakses dalam beberapa saat, jadi jika push datang untuk mendorong OS berpikir itu dapat ditukar dengan disk dan (dengan sedikit keberuntungan) program mengklaim tidak akan meminta lagi sehingga tidak akan pernah memperhatikan.
Apa itu memori "Bekas" (definisi MANUSIA)
Apa yang Anda dan saya anggap sebagai memori "Bekas" adalah, pada dasarnya, jumlah dari memori Aktif dan Tidak Aktif. Semua RAM saat ini diklaim oleh aplikasi untuk penggunaannya.
Selama Anda memiliki RAM yang diinstal lebih banyak daripada jumlah memori Aktif dan Tidak Aktif (ditambah margin keamanan yang bagus katakanlah 512-1024MB di atas) Anda berada di tempat yang tepat: OS Anda mungkin tidak akan memukul swap dan mematikan kinerja .
Apa itu memori "Gratis" (definisi MANUSIA) ?
Apa yang Anda dan saya anggap sebagai memori "bebas" adalah memori yang tersedia untuk menjalankan program.
Ini sedikit lebih rumit daripada hanya "Gratis" angka laporan OS Anda. Ketika sebuah program meminta RAM, sistem operasi akan mencoba mendapatkan RAM dengan cara yang paling tidak mengganggu:
- Jika ada memori bebas yang tersedia (duduk-duduk saja tidak melakukan apa-apa), RAM akan dialokasikan.
- Jika tidak ada memori bebas yang tersedia, OS akan mengkanibalkan ruang Cache dan Buffer: Hal-hal yang paling jarang diakses / paling sering diakses di buffer pool akan dibuang, dan bahwa RAM diberikan untuk program.
- Jika tidak ada Buffer / Cache RAM untuk mengkanibal, swapper akan melihat memori yang tidak aktif dan memilih wilayah yang dianggap paling tidak mungkin untuk diakses. Data yang akan paged keluar untuk swap (disk), dan RAM baru dibebaskan diberikan kepada program.
- Jika semua RAM Tidak Aktif telah ditukar, penukar akan mulai meletakkan RAM Aktif pada disk.
(Ini adalah tentang di mana kinerja biasanya pergi ke anjing: Setiap kali program mendapat giliran pada CPU bit yang ditukar perlu dibawa kembali ke RAM, yang berarti beberapa memori aktif program lain harus ditukar - yang omset tinggi dalam swap disebut meronta - ronta )
- Jika sistem telah menukar segalanya yang dapat dilakukannya (dan mengisi partisi swap), atau jika Anda menjalankan sistem tanpa partisi swap, Hal Buruk terjadi. Pada titik ini satu dari dua hal akan terjadi:
malloc()
akan gagal. Ini adalah perilaku yang menyesuaikan POSIX - sistem operasi akan memberi tahu program yang meminta RAM bahwa ia tidak dapat memenuhi permintaan.
Program dapat meminta lebih sedikit RAM, atau jika tidak dapat dilakukan dengan sepotong memori yang lebih kecil, program dapat membersihkan dan keluar. (Jika program ditulis dengan buruk, itu hanya akan crash.)
- Jika Anda menggunakan Linux, OOM-Killer mungkin menggunakan drive-geng-style dengan membunuh foya, menghentikan proses lain untuk mencoba membebaskan RAM yang cukup untuk memenuhi permintaan.
Jika Anda tidak dapat memberi tahu uraian saya di sini dan jawaban saya pada pertanyaan terkait, saya pikir ini adalah cara yang mengerikan untuk menangani masalah tersebut.
Mengapa RAM Gratis naik ketika Anda menghapus file?
Dalam contoh dari pertanyaan di sini Anda perhatikan bahwa dimungkinkan untuk "Membebaskan" RAM dengan menghapus file cadangan - penjelasan untuk itu cukup sederhana: Karena tidak ada yang menggunakan file itu (tidak ada pegangan file terbuka) dan tidak lagi dapat diakses dari filesystem (tidak terhubung) OS tahu tidak ada yang akan pernah mengakses data itu lagi, dan itu membersihkan data dari cache filesystem.
Ini membuat OS melaporkan lebih banyak memori bebas, tetapi tidak berdampak pada kinerja sistem.