Selama bertahun-tahun saya mengalami masalah yang sama dengan konfigurasi Ubuntu kecil saya: ruang swap yang digunakan meningkat seiring waktu. Saya mendapat kesan bahwa ini terutama karena memori yang dialokasikan tidak pernah kembali ke RAM meskipun ada cukup ruang untuk itu, kecuali dalam kasus tindakan pengguna seperti menonaktifkan swap.
Saya membuat cron
perintah singkat untuk mengotomatisasi ini, dan saya memiliki hasil yang baik:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Tetapi karena ini lebih merupakan trik daripada solusi nyata untuk masalah ini, saya bertanya-tanya tentang kemungkinan alasan itu mungkin ide yang buruk, atau bagaimana saya bisa memperbaiki skrip ini untuk membuatnya sedikit lebih pintar?
Jawaban:
Menggunakannya seperti itu: ya, buruk. Anda benar-benar perlu memeriksa apakah ada cukup memori yang tersedia sebelum Anda mematikan swap. Lihat /ubuntu//a/90399/15811 untuk versi yang lebih baik.
Juga: apakah Anda yakin tentang ini? Swap yang dialokasikan tidak berarti swap digunakan. Perintah
vmstat
, kolomsi
(swap in) danso
(swap out). Jika mereka tetap 0 Anda punya masalah lain. Dalam pengalaman saya swap jarang digunakan, dan Anda mungkin tidak menggunakannya berpikir itu tidak mengosongkannya tetapi tidak ada yang kosong.sumber
vmstat
.Menurut saya itu ide yang buruk. Jika Anda berpikir Anda memiliki memori bebas dan proses aktif tidak dipindahkan dari swap ke RAM, maka Anda tidak memiliki memori bebas sebanyak yang Anda pikir Anda miliki, atau prosesnya tidak seaktif seperti yang Anda pikirkan. aku s.
Jika proses aktif terus ditukar, Anda harus memperbaiki apa pun yang menyebabkan tekanan pada memori. Jika ini bukan proses aktif, apa masalahnya?
sumber
Itu ide yang buruk.
Kernel mulai menyalin (tidak bergerak) data untuk bertukar jauh sebelum memori fisik hampir penuh, karena jika beberapa proses pernah membutuhkan banyak memori, setiap halaman yang sudah memiliki salinan yang valid dalam swap dapat digunakan kembali dengan segera tanpa perlu menulis lagi ke disk.
Umumnya itu terjadi sebagian besar untuk halaman yang belum diakses dalam waktu lama, yang merupakan indikator yang baik bahwa tidak mungkin mereka akan segera diakses.
Jika Anda secara eksplisit membuang salinan, itu tidak membawa manfaat, karena data masih ada dalam RAM, tetapi mungkin dikenakan biaya lebih cepat ketika beberapa proses ingin mengalokasikan banyak memori dan bertukar menjadi diperlukan.
Kernel juga akan selalu menggunakan ruang swap segera setelah memori fisik di atas 50% penuh, sehingga angka-angka ini akan menjadi nol bahkan jika Anda memiliki cukup memori terpasang.
sumber
/proc/sys/vm/swappiness
dibiarkan pada nilai default70
, yang baik untuk server dan cukup agresif halaman halaman kotor dari proses yang belum menyentuh mereka untuk sementara waktu untuk memberikan ruang bagi lebih banyak pagecache. Ini sering buruk untuk desktop karena alt-tab bisa menjadi lambat.swappiness=70
), tetapi latensi lebih penting untuk pengalaman pengguna di desktop. Ini tradeoff. Jika Anda secara rutin mengkompilasi barang-barang yang sedikit terlalu besar untuk tetap berada di dalam pagecache, maka pastikan, sisakanswappiness
sedikit lebih tinggi, seperti 20 atau 30 daripada 5 atau 10. Lihat juga akitaonrails.com/2017/01/17/optimizing-linux-for -lambat-komputer . Melihatvm.vfs_cache_pressure
lebih rendah dari 100 juga mendukung metadata caching inode / direktori pada halaman data, yang juga bagus untuk responsif UI.Ini ide yang buruk. Jika ini berguna, kernel Linux akan mengimplementasikannya dengan cara ini. Saya tidak percaya ada alasan untuk mengubah lebih dari beberapa parameter penyetelan, karena itu skrip shell sederhana kemungkinan besar tidak lebih pintar dari algoritma pengembang kernel.
Pada dasarnya Anda memiliki dua kasus:
Jadi ada dua poin utama:
Meskipun tidak ada masalah kehabisan memori dengan terlalu banyak program, beberapa program mungkin mengalokasikan memori berdasarkan RAM yang saat ini gratis (mungkin browser Anda akan menggunakan lebih banyak memcache dan Anda dapat menjelajah lebih cepat) dan kernel dapat menggunakan RAM gratis untuk cache disk dan optimisasi serupa. Ketika Anda memaksa swap Anda menjadi kosong, kernel akan menjatuhkan cache read-nya dan mis. Memulai instance Firefox baru akan memakan waktu lebih lama daripada ketika Firefox masih dalam cache disk.
Jika Anda ingin menyesuaikan perilaku kernel, lihat parameter swappiness .
Dua sumber daya tambahan disumbangkan oleh @ peter-cordes:
Jika Anda benar-benar ingin memiliki swap kosong, Anda dapat mematikan swap secara permanen. Saya tidak mengerti mengapa menyalakannya selama satu jam dan kemudian mengosongkannya memiliki kelebihan dibanding tidak memiliki swap.
sumber
Anda dapat mencapai hasil yang sama dengan memberi tahu kernel untuk membebaskan cache:
Dengan cara ini Anda menghindari momen singkat dari kemungkinan kehabisan memori dan membiarkan kernel memutuskan apa yang perlu dan apa yang bisa dibuang.
sumber
Bertentangan dengan ide umum SWAP itu sendiri tidak buruk .
Apa yang sebenarnya memperlambat sistem Anda adalah aktivitas kernel yang memindahkan Data dari RAM ke SWAP dan kembali ke RAM, the
swappiness
.Sistem melakukan ini secara otomatis karena dikonfigurasi dengan
swappiness
.Ini membuat Memori dari proses tidak aktif dibuang ke Partisi Tukar Harddisk.
Saya sendiri bekerja selama bertahun-tahun dengan Mesin yang tidak memiliki begitu banyak Memori RAM dan saya selalu menggunakan beberapa Memori SWAP. Tetap mesin saya bekerja dengan baik sampai Anda mulai memindahkan memori kembali ke RAM, mungkin dengan mencoba untuk menutup aplikasi yang terbuka. Kemudian Beban Kerja mulai meningkat.
Sebaliknya saya akan menyarankan Anda mempelajari secara dekat aplikasi mana yang menggunakan memori Anda pada baris perintah dengan
htop
aplikasi dan memutuskan untuk menutup beberapa Aplikasi. Thegnome-system-monitor
dapat memberikan wawasan yang baik juga, di nya Proses-Tab.Jika Anda memiliki aplikasi besar yang menggunakan banyak RAM. Jangan jalankan semuanya sekaligus.
sumber