Pertanyaan Bagaimana cara mengosongkan swap jika ada RAM gratis?


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, RAM 2GB dibebaskan, tetapi penggunaan ruang swap yang sama tetap ada.

Misalnya, sekarang, sekitar dua jam setelah menutup VirtualBox, saya memiliki 1.6GB RAM gratis dan masih 770 MB dalam pertukaran.

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


255
2017-08-06 06:43


asal


Hal termudah reboot perangkat Anda dan menghemat waktu mengatasi ram dan ram gratis menghemat daya laptop dan suhu cpu - Mohamed Slama
Asumsi besar bahwa mengisi kembali semua barang di komputer Anda membutuhkan waktu lebih sedikit dari itu. - jQwierdy


Jawaban:


Hanya karena swap dialokasikan, bukan berarti itu sedang 'digunakan'. Sementara program seperti monitor sistem dan top akan menunjukkan beberapa ruang swap Anda sedang dialokasikan (dalam contoh Anda 770MB) itu tidak berarti bahwa sistem secara aktif bertukar in / out.

Untuk mengetahui apakah ada yang bertukar / keluar Anda dapat menggunakan vmstat perintah. Biarkan berjalan beberapa detik untuk menyelesaikan dan menonton si (swapin) dan so Kolom (swapout). Jika tidak ada yang terjadi maka tidak ada alasan untuk khawatir.

Inilah output dari running 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 di top Anda dapat melihat Saya memiliki ruang swap yang dialokasikan: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached

146
2017-08-06 10:04



"Tidak ada alasan untuk khawatir", sampai pada titik ketika saya terus menggunakan beberapa aplikasi yang ditukar. maka semua neraka akan lepas. - törzsmókus
Posting ini tidak menjawab pertanyaan. - emchristiansen
Premis pertanyaan itu didasarkan pada kesalahpahaman. Posting ini membahas kesalahpahaman. - popey
Saya tidak melihat kesalahpahaman, saya melihat perselisihan tentang apa yang "digunakan" artinya. Anda berarti "digunakan" untuk merujuk secara aktif swapping in / out, sedangkan pertanyaan asli tampaknya diajukan dengan "digunakan" yang berarti bahwa ada data yang telah ditukar, yang nantinya perlu ditukarkan kembali. Ada alasan yang sah untuk membanjiri swap setelah peristiwa yang mengganti banyak memori lain, pada dasarnya melakukan pre-empting swapping aktif yang diketahui oleh pengguna akan terjadi nanti (terutama jika nanti 'de-swapping' kemungkinan akan terjadi ketika disk sedang di-load karena alasan lain). - drfrogsplat
Setelah menjalankan aplikasi intensif memori, aplikasi saya yang lain tidak responsif ketika saya beralih ke mereka, mungkin karena di-swap. Beberapa cara memberitahu sistem untuk tidak menukar data sebanyak mungkin (diikuti dengan rehat kopi) akan lebih baik daripada harus menunggu 20 detik setiap kali saya Alt + Tab. - Mark K Cowan


Kernel Linux yang mendasari Ubuntu akan secara otomatis "menukarkan" halaman-halaman dari disk ke RAM sesuai kebutuhan, jadi secara umum saya akan mengatakan membiarkannya terjadi secara alami.

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

sudo swapoff -a
sudo swapon -a

ATAU alternatif sebagai satu perintah

swapoff -a && swapon -a

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


348
2017-08-06 06:47



Itu triknya, 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
Swap itu tidak disalin ke RAM. Itu hanya dinonaktifkan. Anda harus memastikan kotak tidak bertukar sebelum melakukan hal ini. Jika Anda melakukannya, maka kernel akan melihat memori hilang dan OOM-Killer mungkin akan mulai membunuh aplikasi secara sewenang-wenang. Tidak ada alasan Anda harus 'membersihkan' swap seperti ini. (lihat komentar saya yang lain) :) - popey
Sebenarnya swap ini, pada dasarnya, disalin ke ram, atau lebih tepatnya, halaman di-swap kembali dari disk ke RAM sebelum swap dapat dinonaktifkan. - SpamapS
Halaman-halaman disalin ke RAM hanya jika mereka masih dibutuhkan oleh beberapa proses. Terkadang halaman bertukar milik proses yang telah selesai, dan kernel tidak peduli untuk menghapus halaman-halaman ini dari swap segera. - BrunoJCM
Ini harus menjadi jawaban yang benar, karena ini adalah cara untuk mengembalikan halaman yang di-swap ke RAM dan kemudian mengosongkan memori swap - Alfonso Jiménez


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

Pengaturan default di Ubuntu adalah swappiness = 60. Mengurangi nilai default dari 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 peningkatan kecepatan yang signifikan dan mudah dipahami ke sistem yang lebih lama dengan drive yang lambat. Menetapkan nilai ini ke 0 tidak mengubah swap untuk kernel Linux 3.4 dan di bawah tetapi dengan 3.5+ yang dilakukannya sehingga 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 hits disk lebih lambat dari RAM. Saya memiliki 8 virtual core, sebuah SSD cepat & 8 GB memori dan swap saya diatur ke 0. Pada saat ini saya memiliki 3 mesin virtual yang berjalan, penggunaan memori saya adalah 7,1 dari 7,7 GB, swap yang saya gunakan hanya pada 576KB dari 952MB dan semua sistem berjalan lancar!

Dari SwapFAQ Ubuntu:

Parameter swappiness mengontrol kecenderungan kernel untuk memindahkan proses keluar 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 memberitahu kernel untuk menghindari proses swapping dari memori fisik selama mungkin
  3. swappiness = 100 memberitahu kernel untuk menukar proses secara agresif dari memori fisik dan memindahkannya ke swap cache

Di bawah ini adalah instruksi 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 dari swap yang Anda gunakan. Proses ini mungkin memakan waktu cukup lama, gunakan gnome-system-monitor untuk memantau dan memverifikasi kemajuan.

sudo swapoff --all

Untuk menetapkan nilai baru ke 0:

sudo sysctl vm.swappiness=0 

Untuk mengaktifkan kembali swap:

sudo swapon --all

Untuk secara permanen mengatur swappiness ke 0:

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

* Dengan kernel versi 3.5+ pengaturan swappiness ke 0 tidak mematikannya 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/


119
2018-06-11 14:10



Ini harus menjadi jawaban yang diterima. - quant
Saya baru saja memperbarui jawabannya untuk memasukkan cara permanen untuk mengatur swappiness. Tidak yakin bagaimana itu mendapat begitu banyak, saya kira tidak ada yang mengujinya. - Elijah Lynn
Pembacaan lebih baik pada swappiness dalam jawaban ini => askubuntu.com/a/103916/11929 - Elijah Lynn
Menambahkan catatan tentang perilaku swappiness = 0 berubah dengan versi kernel Linux 3.5+. - Elijah Lynn
Saya tidak yakin apakah ini tersedia ketika penulis awalnya memposting jawaban tetapi nilai swappiness "60" sudah terpasang untuk menginstal server ubuntu karena lingkungan itu memiliki spesifikasi yang berbeda untuk kinerja. help.ubuntu.com/community/… - Frito


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

Saya telah menulis naskah yang saya sebut toggle_swap yang telah bekerja untuk saya selama beberapa tahun terakhir. Ini memeriksa cukup RAM gratis 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

46
2017-12-25 16:35



Ini sangat membantu, terima kasih! - Luke Cousins
Hei, ini solusi terbaik. Terima kasih! - Fabio A. Correa
Luar biasa saya mencari sesuatu seperti ini. Mungkin menjadi sedikit lebih aman Anda bisa menyajikan jumlah dan persentase dan kemudian bertanya, hanya untuk benar-benar yakin. - Atherion
Saya telah memperbarui kode dan telah membuat basis berdasarkan gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c - Jekis
Ini adalah kesimpulan yang saya capai setelah membaca semua tips, seperti orang harus memastikan ada cukup banyak RAM sebelum membunuh swap. Terima kasih tuan, skrip bagus. Harus dimasukkan ke dalam Ubuntu secara default (tidak main-main, itu benar-benar musthave.) - Shiki


Setelah menyimpang bersama swappiness selama beberapa hari, saya sampai pada kesimpulan bahwa kernel harus diserahkan ke perangkatnya sendiri. Ia tahu apa yang dilakukannya, dan itu dioptimalkan untuk memberi Anda pengalaman terbaik.

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


23
2017-08-06 16:34



Saya memiliki beberapa item dalam swap, vmstat menunjukkan kepada saya bahwa swapin dan swapout terjadi, dan Chrome tertinggal, sementara CPU saya hampir tidak digunakan. Cukup alasan yang bagus, bukan? - Xerus


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


1
2017-08-11 19:35



Ya tapi jika ada sesuatu aku s ditukar tidak mempengaruhi kinerja, maka pertanyaan ini. - quant