it-swarm-id.com

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

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

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

304
jfoucher

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

Untuk mencari tahu apakah ada yang swap masuk/keluar, Anda dapat menggunakan perintah vmstat. 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 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
163
popey

Kernel Linux yang mendasari Ubuntu akan secara otomatis "menukar" halaman-halaman tersebut 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 perintah

swapoff -a && swapon -a

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

401
SpamapS

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 digunakan 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 progresnya.

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/

140
Elijah Lynn

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 menjalankan Sudo swapoff -a; Sudo swapon -a. Masalahnya di sini adalah bahwa jika ada RAM yang tidak mencukupi, hal itu akan menyebabkan semua jenis masalah.

Saya telah menulis sebuah skrip yang saya sebut toggle_swap yang telah bekerja untuk saya selama beberapa tahun terakhir. Ia memeriksa cukup gratis RAM 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
52
Scott Severance

Setelah bercanda dengan swappiness selama beberapa hari, saya sampai pada kesimpulan bahwa kernel harus dibiarkan ke perangkatnya 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.

26
Erigami

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.

0
Rory