Bagaimana cara mengosongkan swap jika ada RAM gratis?

314

Ketika saya membuka aplikasi RAM-intensif (VirtualBox ditetapkan pada 2GB RAM), beberapa ruang swap umumnya digunakan, tergantung pada apa lagi yang saya buka pada saat itu.

Namun, ketika saya keluar dari aplikasi terakhir itu, 2GB RAM dibebaskan, tetapi penggunaan ruang swap yang sama tetap.

Sebagai contoh, sekarang, sekitar dua jam setelah menutup VirtualBox, saya memiliki 1,6GB RAM gratis dan masih 770MB di swap.

Bagaimana saya bisa memberi tahu Ubuntu untuk berhenti menggunakan swap itu dan kembali menggunakan RAM?

jfoucher
sumber
Hal termudah untuk merestart perangkat Anda dan menghemat waktu mengatasi ram dan ram gratis menghemat daya laptop dan suhu cpu
Mohamed Slama
5
Asumsi besar bahwa menghuni kembali semua barang di komputer Anda membutuhkan waktu lebih sedikit dari itu.
jQwierdy
Ubuntu 16,04, setidaknya, dapat tetap menggunakan swap lama setelah itu diperlukan sehingga membuat pesanan sistem Anda besarnya lebih lambat dengan mengandalkan file swap meskipun tidak lagi diperlukan. Karena itu, intervensi manual dapat bermanfaat. Mem-boot ulang tidak selalu merupakan opsi.
matt

Jawaban:

167

Hanya karena swap dialokasikan, tidak berarti itu sedang 'digunakan'. Sementara program-program seperti monitor sistem dan atas akan menunjukkan beberapa ruang swap Anda yang dialokasikan (dalam contoh Anda 770MB) itu tidak berarti bahwa sistem secara aktif bertukar masuk / keluar.

Untuk mencari tahu apakah ada yang swap masuk / keluar, Anda dapat menggunakan vmstatperintah. Biarkan berjalan beberapa detik untuk menyelesaikan dan menonton kolom si(swapin) dan so(swapout). Jika tidak ada yang terjadi maka tidak ada alasan untuk khawatir.

Inilah output dari menjalankan vmstat 1, di mana Anda dapat melihat mesin saya tidak bertukar sama sekali.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

Namun di sini topAnda dapat melihat saya memiliki ruang swap dialokasikan: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
popey
sumber
32
"Tidak ada alasan untuk khawatir", sampai pada titik ketika saya terus menggunakan beberapa aplikasi yang ditukar. maka semua neraka terlepas.
törzsmókus
207
Posting ini tidak menjawab pertanyaan.
emchristiansen
18
Premis dari pertanyaan ini didasarkan pada kesalahpahaman. Posting ini membahas kesalahpahaman.
popey
30
Saya tidak melihat kesalahpahaman, saya melihat ketidaksepakatan tentang apa yang "digunakan" artinya. Anda berarti "digunakan" untuk merujuk aktif bertukar masuk / keluar, sedangkan pertanyaan asli tampaknya diajukan dengan "digunakan" yang berarti bahwa ada data yang telah ditukar, yang kemudian mungkin perlu ditukar kembali. Ada alasan yang sah untuk ingin mem-flush swap setelah peristiwa yang menukar banyak memori lain, pada dasarnya pre-empting swapping aktif yang diketahui pengguna akan terjadi kemudian (terutama jika nanti 'de-swapping' kemungkinan akan terjadi saat disk sedang dimuat karena alasan lain).
drfrogsplat
39
Setelah menjalankan aplikasi intensif memori, aplikasi saya yang lain tidak responsif ketika saya beralih ke mereka, mungkin karena ditukar. Beberapa cara untuk memberitahu sistem untuk un-swap data sebanyak mungkin (diikuti dengan coffee break) akan lebih baik daripada harus menunggu 20-an setiap kali saya Alt + Tab.
Mark K Cowan
424

Kernel Linux yang mendasari Ubuntu akan secara otomatis "menukar" halaman-halaman itu dari disk ke RAM sesuai kebutuhan, jadi secara umum saya katakan biarkan saja itu terjadi secara alami.

Namun, jika Anda benar-benar merasa perlu memaksanya, (saya bisa melihat skenario di mana Anda ingin tahu bahwa sistem akan responsif nanti) Anda dapat menonaktifkan dan mengaktifkan kembali swap untuk sementara waktu

sudo swapoff -a
sudo swapon -a

ATAU sebagai satu baris

swapoff -a; swapon -a

Hati-hati melakukan ini, karena Anda dapat membuat sistem Anda tidak stabil, terutama jika sudah rendah pada RAM.

SpamapS
sumber
8
Itu berhasil, swap disalin ke ram. Saya kira Anda hanya perlu memastikan untuk memiliki setidaknya jumlah swap yang digunakan sebagai ram gratis sebelum menjalankan swapoff, kan?
jfoucher
12
Swap tidak disalin ke RAM. Itu hanya cacat. Anda harus memastikan kotak tidak bertukar sebelum melakukan ini. Jika Anda melakukannya, maka kernel akan melihat memori hilang dan OOM-Killer mungkin akan mulai mematikan aplikasi secara sewenang-wenang. Tidak ada alasan Anda harus 'membersihkan' swap seperti ini. (lihat komentar saya yang lain) :)
popey
51
Sebenarnya swap, pada dasarnya, disalin ke ram, atau lebih tepatnya, halaman-halaman tersebut ditukar kembali dari disk ke RAM sebelum swap dapat dinonaktifkan.
SpamapS
14
Halaman-halaman disalin ke RAM hanya jika mereka masih dibutuhkan oleh beberapa proses. Terkadang halaman yang ditukar adalah bagian dari proses yang telah selesai, dan kernel tidak peduli untuk segera menghapus halaman ini dari swap.
BrunoJCM
6
Ini harus menjadi jawaban yang benar, karena itu adalah cara untuk mendapatkan halaman yang ditukar kembali ke RAM dan kemudian mengosongkan memori swap
Alfonso Jiménez
144

Anda juga dapat mengatur nilai "swappiness" Anda dari default 60, dengan cara ini swap tidak akan tumbuh begitu besar untuk memulai. Mengapa pengiriman standar diatur ke 60 ketika nilai yang disarankan adalah 10 membingungkan saya. Dari Ubuntu SwapFAQ :

Pengaturan default di Ubuntu adalah swappiness = 60. Mengurangi nilai default swappiness mungkin akan meningkatkan kinerja keseluruhan untuk instalasi desktop Ubuntu yang khas. Nilai swappiness = 10 direkomendasikan , tetapi jangan ragu untuk bereksperimen.

Dengan mengubah nilai ini menjadi 10 atau bahkan 0, Anda dapat menambahkan dorongan kecepatan yang signifikan dan dapat dilihat ke sistem yang lebih lama dengan drive yang lambat. Mengatur nilai ini ke 0 tidak mematikan swap untuk kernel Linux 3.4 dan di bawah tetapi dengan 3.5+ itu melakukannya Anda akan ingin menggunakan nilai 1 jika Anda ingin tetap pada pengaturan terendah *.

Saya tidak melihat alasan untuk tidak mengatur ini ke 0 karena apa pun yang mengenai disk lebih lambat dari RAM. Saya memiliki 8 core virtual, SSD yang cepat & memori 8 GB dan swap saya diatur ke 0. Pada saat ini saya memiliki 3 mesin virtual yang sedang berjalan, penggunaan memori saya adalah 7.1 dari 7.7 GB, swap yang saya gunakan hanya pada 576KB dari 952MB dan semua sistem berjalan dengan lancar!

Dari Ubuntu SwapFAQ :

Parameter swappiness mengontrol kecenderungan kernel untuk memindahkan proses dari memori fisik dan ke swap disk. Karena disk jauh lebih lambat daripada RAM, ini dapat menyebabkan waktu respons yang lebih lambat untuk sistem dan aplikasi jika proses terlalu agresif keluar dari memori.

  1. swappiness dapat memiliki nilai antara 0 dan 100
  2. swappiness = 0 memberi tahu kernel untuk menghindari proses swapping dari memori fisik selama mungkin
  3. swappiness = 100 memberitahu kernel untuk secara agresif menukar proses dari memori fisik dan memindahkannya ke swap cache

Di bawah ini adalah petunjuk dasar untuk memeriksa swappiness, mengosongkan swap Anda dan mengubah swappiness ke 0:

Untuk memeriksa nilai swappiness:

cat /proc/sys/vm/swappiness

Untuk sementara mengatur swap ke 0 ( seperti yang disarankan oleh SpamapS ):

Ini akan mengosongkan swap Anda dan mentransfer semua swap kembali ke memori. Pertama-tama pastikan Anda memiliki cukup memori yang tersedia dengan melihat tab sumber daya dari gnome-system-monitor, memori bebas Anda harus lebih besar daripada swap yang Anda gunakan. Proses ini mungkin memakan waktu cukup lama, gunakan gnome-system-monitor untuk memantau dan memverifikasi perkembangannya.

sudo swapoff --all

Untuk menetapkan nilai baru ke 0:

sudo sysctl vm.swappiness=0 

Untuk mengaktifkan kembali swap:

sudo swapon --all

Untuk menetapkan swappiness secara permanen ke 0:

  1. sudoedit /etc/sysctl.conf
  2. Tambahkan baris ini vm.swappiness = 0
  3. sudo shutdown -r now # restart sistem

* Dengan kernel versi 3.5+ pengaturan swappiness ke 0 tidak mematikan sepenuhnya dan pengaturan 1 direkomendasikan jika Anda ingin algoritma swappiness terendah. sumber: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

Elijah Lynn
sumber
1
Saya baru saja memperbarui jawaban untuk menyertakan cara permanen untuk mengatur swappiness. Tidak yakin bagaimana itu bisa begitu banyak dipilih, saya kira tidak ada yang mengujinya.
Elijah Lynn
1
Bacaan yang lebih baik tentang swappiness dalam jawaban ini => askubuntu.com/a/103916/11929
Elijah Lynn
3
Saya tidak yakin apakah ini tersedia ketika penulis awalnya memposting jawabannya tetapi nilai swappiness "60" sudah tersedia untuk instalasi server ubuntu karena lingkungan itu memiliki serangkaian spesifikasi kinerja yang berbeda. help.ubuntu.com/community/…
Frito
1
Pengaturan ini sangat efektif dalam mengontrol ukuran swap. Sistem saya memiliki 16G RAM dan 16G swap. Terkadang saya menjalankan VM dan beberapa aplikasi saya diganti. Ketika saya menutup VM, penggunaan RAM turun, tetapi penggunaan swap tetap sama dan sistem saya tertinggal saat mengganti aplikasi. Mengubah swapiness telah meningkatkan kinerja saya.
kapad
1
Ini seharusnya jawaban yang benar-benar diterima. Penjelasan menyeluruh tentang masalah, dan itu solusinya, serta tautan dan solusi untuk mempertahankan memori Swap, tetapi membantu tetap terkendali di tempat pertama. Hal yang mengagumkan. Terima kasih. :)
Jack_Hu
53

Saya telah menemukan bahwa mengosongkan swap dapat banyak membantu pada sistem dengan disk yang lambat dan RAM yang terbatas. Tentu saja, seperti yang telah disebutkan, cara untuk melakukan ini adalah menjalankannya sudo swapoff -a; sudo swapon -a. Masalahnya di sini adalah bahwa jika ada RAM yang tidak mencukupi, melakukan hal itu akan menyebabkan semua jenis masalah.

Saya telah menulis sebuah skrip yang saya sebut toggle_swapyang telah bekerja untuk saya selama beberapa tahun terakhir. Ini memeriksa RAM gratis yang cukup sebelum benar-benar menonaktifkan swap. Ini dia:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
Scott Severance
sumber
Luar biasa aku mencari sesuatu seperti ini. Mungkin agar sedikit lebih aman Anda bisa mempresentasikan angka dan persentase dan kemudian bertanya, hanya untuk benar-benar yakin.
Atherion
2
Saya telah memperbarui kode dan telah membuat gist
Jekis
Ini adalah kesimpulan yang saya capai setelah membaca semua tips, seperti orang harus memastikan ada RAM yang cukup sebelum mematikan swap. Terima kasih tuan, naskah yang bagus. Seharusnya dimasukkan dalam Ubuntu secara default (bukan main-main, itu benar-benar harus dimiliki.)
Shiki
Kecuali jika Anda menjalankan hal baru saat mematikan swap, dan sebelum kembali aktif - itu tidak akan memiliki cukup memori.
barteks2x
Itu tergantung pada seberapa banyak memori bebas yang Anda miliki. Jika ada cukup memori bebas untuk menahan semuanya dalam swap DAN proses baru, maka tidak ada masalah. Jika tidak maka Anda benar.
Scott Severance
25

Setelah mondar-mandir dengan swappiness selama beberapa hari, saya sampai pada kesimpulan bahwa kernel harus dibiarkan sendiri. Ia tahu apa yang dilakukannya, dan dioptimalkan untuk memberi Anda pengalaman terbaik.

Kecuali Anda memiliki alasan yang sangat bagus untuk menginginkan disk itu kembali, saya akan membiarkannya.

Erigami
sumber
2
Saya punya beberapa hal dalam swap, vmstat menunjukkan kepada saya bahwa swapin dan swapout sedang terjadi, dan Chrome ketinggalan, sementara CPU saya hampir tidak digunakan. Alasan yang cukup bagus, bukan?
Xerus
Pasti ada kasus di mana swapping tertentu pada desktop membuatnya lambat. (tidak ketika sedang bertukar, tetapi juga setelah, ketika ada RAM yang cukup, untuk waktu yang lama setelah itu.) Jadi yang terbaik jawaban ini hanya pengalaman subjektif yang terjadi dalam beberapa kasus.
Cray
-1

Itu tidak mempengaruhi kinerja jika ruang swap Anda ditempati. Satu-satunya penalti kinerja adalah barang masuk / keluar dari swap. Jika tidak ada yang ditukar / ditukar, maka Anda tidak perlu khawatir tentang apa pun.

Rory
sumber
10
Ya tetapi jika sesuatu yang sedang bertukar itu tidak mempengaruhi kinerja, maka pertanyaan ini.
kuant
Itu adalah omong kosong, biasanya swap fallback besar pada HDD atau umumnya pada perangkat yang lebih lambat dari RAM - jika ruang habis - barang yang ada ditukar - seperti misalnya browser internet - dan kemudian Anda praktis menggunakannya dari perangkat yang lebih lambat. ..
jave.web