Saya pikir seluruh esensi dari swap adalah untuk bertindak sebagai jaring pengaman penyimpanan sementara ketika RAM penuh tetapi partisi swap saya terus digunakan walaupun saya kadang-kadang memiliki sebanyak 3GB RAM gratis. Apakah ini normal?
Saya pikir seluruh esensi dari swap adalah untuk bertindak sebagai jaring pengaman penyimpanan sementara ketika RAM penuh tetapi partisi swap saya terus digunakan walaupun saya kadang-kadang memiliki sebanyak 3GB RAM gratis. Apakah ini normal?
Jawaban:
Anda dapat mencoba mengubah nilai "swappiness" Anda:
Dari FAQ Swap Ubuntu :
Apa itu swappiness dan bagaimana cara mengubahnya?
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.
swappiness dapat memiliki nilai antara 0 dan 100
swappiness = 0 memberi tahu kernel untuk menghindari proses swapping dari memori fisik selama mungkin. Untuk Kernel versi 3.5 dan yang lebih baru menonaktifkan swapiness.
swappiness = 100 memberitahu kernel untuk secara agresif menukar proses dari memori fisik dan memindahkannya ke swap cache
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. Catatan: Instalasi server Ubuntu memiliki persyaratan kinerja yang berbeda untuk sistem desktop, dan nilai default 60 kemungkinan lebih cocok.
Untuk memeriksa nilai swappiness
cat /proc/sys/vm/swappiness
Untuk mengubah nilai swappiness Perubahan sementara (hilang saat reboot) dengan nilai swappiness 10 dapat dilakukan
sudo sysctl vm.swappiness=10
Untuk membuat perubahan permanen , edit file konfigurasi dengan editor favorit Anda:
gksudo gedit /etc/sysctl.conf
Cari vm.swappiness dan ubah nilainya sesuai keinginan. Jika vm.swappiness tidak ada, tambahkan ke akhir file seperti ini:
vm.swappiness=10
Simpan file dan reboot.
Anda juga dapat melihat: https://askubuntu.com/a/103916/54187
sudo sysctl --load=/etc/sysctl.conf
setelah mengedit file untuk menerapkan perubahan
Ada beberapa aspek berbeda untuk pertanyaan Anda.
Pertama, apa definisi Anda tentang "bebas". Ini sebenarnya tidak sesederhana seperti yang terdengar di Linux (atau sistem operasi modern).
Bagaimana Linux menggunakan RAM (sangat sederhana)
Setiap aplikasi dapat menggunakan sebagian dari memori Anda. Linux menggunakan semua memori yang tidak dihuni (kecuali untuk beberapa Mb terakhir) sebagai "cache". Ini termasuk halaman cache, inode cache, dll. Ini adalah hal yang baik - ini membantu mempercepat segalanya. Baik menulis ke disk maupun membaca dari disk dapat dipercepat dengan cache.
Idealnya, Anda memiliki cukup memori untuk semua aplikasi Anda, dan Anda masih memiliki beberapa ratus Mb tersisa untuk cache. Dalam situasi ini, selama aplikasi Anda tidak meningkatkan penggunaan memori dan sistem tidak berjuang untuk mendapatkan ruang yang cukup untuk cache, tidak perlu untuk swap apa pun.
Setelah aplikasi mengklaim lebih banyak RAM, itu hanya masuk ke beberapa ruang yang digunakan oleh cache, menyusut cache. De-alokasi cache murah dan cukup mudah dilakukan secara real time - semua yang berada di cache adalah salinan kedua dari sesuatu yang sudah ada di disk, jadi bisa langsung dibatalkan alokasinya secara instan, atau itu adalah sesuatu yang kita inginkan harus flush ke disk dalam beberapa detik ke depan pula .
Ini bukan situasi yang khusus untuk Linux - semua sistem operasi modern bekerja dengan cara ini. Sistem operasi yang berbeda mungkin hanya melaporkan RAM bebas secara berbeda: beberapa menyertakan cache sebagai bagian dari apa yang mereka anggap "bebas" dan beberapa mungkin tidak.
Ketika Anda berbicara tentang RAM gratis, itu jauh lebih berarti untuk memasukkan cache, karena sebenarnya gratis - itu tersedia jika ada aplikasi yang memintanya. Di Linux, free
perintah melaporkannya dua arah - baris pertama termasuk cache di kolom RAM yang digunakan, dan baris kedua termasuk cache (dan buffer) di kolom gratis.
Bagaimana Linux menggunakan swap (bahkan lebih disederhanakan)
Setelah Anda menggunakan cukup memori sehingga tidak ada cukup sisa untuk cache yang berjalan mulus, Linux dapat memutuskan untuk mengalokasikan kembali beberapa memori aplikasi yang tidak digunakan dari RAM untuk swap.
Itu tidak melakukan ini sesuai dengan cut-off yang pasti. Ini tidak seperti Anda mencapai persentase alokasi tertentu kemudian Linux mulai bertukar. Ini memiliki algoritma yang agak "fuzzy". Dibutuhkan banyak hal untuk diperhitungkan, yang dapat dijelaskan dengan "berapa banyak tekanan yang ada untuk alokasi memori". Jika ada banyak "tekanan" untuk mengalokasikan memori baru, maka itu akan meningkatkan peluang beberapa akan ditukar untuk membuat lebih banyak ruang. Jika ada sedikit "tekanan" maka itu akan mengurangi peluang ini.
Sistem Anda memiliki pengaturan "swappiness" yang membantu Anda mengubah cara "tekanan" ini dihitung. Biasanya tidak disarankan untuk mengubahnya sama sekali, dan saya tidak akan merekomendasikan Anda mengubahnya. Bertukar secara keseluruhan adalah hal yang sangat baik - meskipun ada beberapa kasus tepi yang membahayakan kinerja, jika Anda melihat kinerja sistem secara keseluruhan, itu adalah keuntungan bersih untuk berbagai tugas. Jika Anda mengurangi swappiness, Anda membiarkan jumlah memori cache menyusut sedikit lebih banyak daripada yang seharusnya, bahkan ketika itu mungkin benar-benar bermanfaat. Apakah ini pertukaran yang cukup baik untuk masalah apa pun yang Anda alami dengan bertukar, itu terserah Anda. Anda hanya harus tahu apa yang Anda lakukan, itu saja.
Ada situasi yang terkenal di mana swap benar-benar merusak kinerja yang dirasakan pada sistem desktop, dan itu adalah seberapa cepat aplikasi dapat menanggapi input pengguna lagi setelah dibiarkan menganggur untuk waktu yang lama dan memiliki proses latar belakang yang berat di IO (seperti backup semalam) dijalankan. Ini adalah kelambatan yang sangat terlihat, tetapi tidak cukup untuk membenarkan mematikan swap secara bersamaan dan sangat sulit untuk dicegah dalam sistem operasi apa pun. Matikan swap dan kelesuan awal ini setelah pemindaian cadangan / virus mungkin tidak terjadi, tetapi sistem mungkin berjalan sedikit lebih lambat sepanjang hari. Ini juga bukan situasi yang terbatas pada Linux.
Ketika memilih apa yang akan ditukar ke disk, sistem mencoba untuk memilih memori yang sebenarnya tidak digunakan - baca atau tulis. Ini memiliki algoritma yang cukup sederhana untuk menghitung ini yang memilih dengan baik sebagian besar waktu.
Jika Anda memiliki sistem di mana Anda memiliki jumlah RAM yang sangat besar (pada saat penulisan, 8GB adalah jumlah yang sangat besar untuk distro Linux biasa), maka Anda akan sangat jarang mendapatkan situasi di mana swap diperlukan sama sekali. Anda bahkan dapat mencoba mematikan swap. Saya tidak pernah merekomendasikan melakukan itu, tetapi hanya karena Anda tidak pernah tahu kapan lebih banyak RAM dapat menyelamatkan Anda dari beberapa aplikasi crash. Tetapi jika Anda tahu Anda tidak akan membutuhkannya, Anda bisa melakukannya.
Tetapi bagaimana cara swap mempercepat sistem saya? Tidak bertukar hal memperlambat?
Tindakan mentransfer data dari RAM ke swap adalah operasi yang lambat, tetapi itu hanya diambil ketika kernel cukup yakin manfaat keseluruhan akan lebih besar daripada ini. Misalnya, jika memori aplikasi Anda telah naik ke titik di mana Anda hampir tidak memiliki cache yang tersisa dan I / O Anda sangat tidak efisien karena ini, Anda sebenarnya bisa mendapatkan lebih banyak kecepatan dari sistem Anda dengan membebaskan beberapa memori, bahkan setelah biaya awal swapping data untuk membebaskannya.
Ini juga merupakan pilihan terakhir jika aplikasi Anda benar-benar meminta lebih banyak memori daripada yang sebenarnya Anda miliki. Dalam hal ini, bertukar diperlukan untuk mencegah situasi kehabisan memori yang sering mengakibatkan aplikasi mogok atau harus dibunuh secara paksa.
Swapping hanya dikaitkan dengan waktu di mana sistem Anda berkinerja buruk karena itu terjadi pada saat Anda kehabisan RAM yang dapat digunakan, yang akan memperlambat sistem Anda (atau membuatnya tidak stabil) bahkan jika Anda tidak memiliki swap. Jadi untuk menyederhanakan banyak hal, swapping terjadi karena sistem Anda menjadi macet, bukan sebaliknya.
Setelah data dalam swap, kapan keluar lagi?
Mentransfer data dari swap adalah (untuk hard disk tradisional, setidaknya) sama memakan waktu dengan memasukkannya ke sana. Jadi bisa dimengerti, kernel Anda akan segan untuk menghapus data dari swap, terutama jika itu tidak benar-benar digunakan (yaitu membaca dari atau ditulis ke). Jika Anda memiliki data dalam swap dan itu tidak digunakan, maka itu sebenarnya hal yang baik bahwa itu tetap di swap, sejak ia meninggalkan lebih banyak memori untuk hal-hal lain yang sedang digunakan, berpotensi mempercepat sistem anda.
free -m
.
Menetapkan nilai swappiness tidak berfungsi di setiap situasi. Jika itu berhasil untuk Anda, bagus. Jika tidak, saya telah menulis skrip untuk menghapus swap secara berkala dengan mematikannya dan kembali lagi.
Beralih swap agak berisiko jika Anda tidak hati-hati. Jika Anda tidak memiliki RAM bebas yang cukup untuk menampung semuanya di dalam RAM plus semua yang ada di swap, mencoba menonaktifkan swap akan menyebabkan sistem Anda menjadi tidak responsif. Skrip saya pertama-tama memeriksa apakah ada cukup RAM bebas (yang perlu sedikit dilakukan, karena jumlah sebenarnya RAM bebas berbeda dari apa yang free
dilaporkan sebagai bebas), kemudian hanya beralih bertukar jika demikian. Tetapi, jika Anda kekurangan RAM, jangan memulai proses besar lainnya saat skrip berjalan. Ini dia:
#!/bin/bash
# Make sure that all text is parsed in the same language
export LC_MESSAGES=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LANG=en_US.utf8
export LANGUAGE=en_US:en
export LC_CTYPE=en_US.UTF-8
# Calculate how much memory and swap is free
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)"
# Do the work
if [[ $used_swap -eq 0 ]]; then
echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
echo "Freeing swap..."
swapoff -a
swapon -a
else
echo "Not enough free memory. Exiting."
exit 1
fi
Anda harus menjalankan skrip ini sebagai root (mis. Dengan sudo
). Skrip ini tidak akan membuat sistem Anda tidak responsif; jika RAM Anda tidak mencukupi, itu akan menolak untuk beralih swap. Saya telah menggunakan skrip ini tanpa masalah selama hampir lima tahun sekarang.
Umumnya swap tetap tidak digunakan pada sistem sekarang-a-hari. Dalam pengalaman saya, proses yang berjalan untuk waktu yang lama tanpa operasi intensif dialihkan ke swap oleh linux.
Itu membuat beberapa program yang terpengaruh berjalan lambat.
Jika Anda memiliki banyak ram gratis, Anda dapat menonaktifkan swap dengan menjalankan perintah:
swapoff -av
(Anda akan memerlukan sudo
hak untuk itu.)
Jika Anda tidak suka swap off, Anda dapat mengaktifkannya, menggunakan perintah simetris:
swapon -av
( sudo
diperlukan lagi ).
Sekali swap telah digunakan untuk suatu program, ia cenderung tetap dipetakan selama program. Banyak program memiliki kode (dan data) yang jarang digunakan .. Setelah memori ditukar, tidak mungkin untuk ditukar.
Salah satu cara untuk memaksa halaman-halaman ini ke dalam memori adalah mematikan perangkat swap. Jika Anda memiliki dua, Anda dapat mematikan satu, menyalakannya kembali, lalu mematikan yang kedua. Jika swap benar-benar diperlukan, itu akan berpindah antar perangkat. Anda bisa mematikan perangkat swap (atau file), tetapi jika Anda benar-benar membutuhkan ruang swap, hal-hal drastis bisa terjadi.
Selain hal-hal normal dalam memori, tempfs menggunakan ruang swap, dan akan bertukar keluar seperti sisa memori. Jika Anda menjalankan sesuatu yang membutuhkan banyak disk sementara, itu mungkin memaksa halaman untuk ditukar. Setelah file temp dibuat tidak dapat digunakan lagi setelah beberapa menit dan merupakan kandidat yang baik untuk dipindahkan ke perangkat swap.
Dalam keadaan darurat, Anda dapat menggunakan file sebagai perangkat swap. Ini berguna jika Anda membutuhkan ruang swap tambahan sementara.
Saya mengedit skrip Scott Severance untuk mencocokkan versi gratis yang lebih baru yang sudah menyertakan total bidang memori yang tersedia.
#!/bin/bash
free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"
echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
echo "Freeing swap..."
sudo swapoff -a
sudo swapon -a
else
echo "Not enough free memory. Exiting."
exit 1
fi
free -m
,top -b 1