Jika desktop saya kehabisan memori dan banyak bertukar maka saya membebaskan atau mematikan aplikasi yang membuang-buang RAM saya. Tetapi, setelah itu, semua desktop / aplikasi saya telah ditukar dan sangat lambat, apakah Anda tahu cara "unswap" (memuat ulang dari ruang swap ke RAM) desktop / aplikasi saya?
20
swapon
/swapoff
(seperti jawaban yang diterima saat ini menyarankan), Anda mungkin ingin membuka-bongkar display manager Anda dan semua anak-anaknya dengan membuang memori proses mereka (yang memaksa unswapping). Lihat juga “Bagaimana cara memaksa proses zsh swapping-out untuk bertukar?” Di stackoverflow.Jawaban:
Jika Anda benar-benar memiliki cukup RAM yang tersedia lagi, Anda dapat menggunakan urutan ini (sebagai root):
(untuk memaksa swap-in eksplisit semua aplikasi Anda)
(dengan asumsi Anda menggunakan linux)
sumber
Skrip python cepat dan kotor berikut ini membuang memori suatu proses ke stdout. Ini memiliki efek samping dari memuat halaman yang ditukar atau file yang dipetakan. Sebut saja
cat_proc_mem 123 456 789
tempat argumennya adalah ID proses.Skrip ini sepenuhnya khusus untuk Linux. Mungkin dapat beradaptasi dengan sistem lain dengan
/proc
struktur yang sama (Solaris?), Tetapi lupakan tentang menjalankannya pada misalnya * BSD. Bahkan di Linux, Anda mungkin perlu mengubah definisic_pid_t
dan nilai-nilaiPTRACE_ATTACH
danPTRACE_DETACH
. Ini adalah skrip pembuktian prinsip, tidak dimaksudkan sebagai contoh praktik pemrograman yang baik. Gunakan dengan risiko Anda sendiri.Linux membuat memori dari suatu proses tersedia sebagai
/proc/$pid/mem
. Hanya rentang alamat tertentu yang dapat dibaca. Rentang ini dapat ditemukan dengan membaca informasi pemetaan memori dari file teks/proc/$pid/maps
. File pseudo/proc/$pid/mem
tidak dapat dibaca oleh semua proses yang memiliki izin untuk membacanya: proses pembaca harus memanggilptrace(PTRACE_ATTACH, $pid)
.Lihat juga informasi lebih lanjut tentang
/proc/$pid/mem
.sumber
kill -CONT 1234
mana 1234 adalah PID) untuk melanjutkannya.Hanya untuk kelengkapan, GDB dapat membuang gambar proses. Saya tidak memeriksa apakah itu membuka, tetapi harus --- tidak ada cara lain untuk membaca seluruh memori proses:
gdb -p $mypid
diikuti oleh
(gdb) gcore /tmp/myprocess-core
Saved corefile /tmp/myprocess-core
sumber
gcore $pid
juga tersedia di luar gdb (sebagai skrip pembungkus kecil)gdb --batch -p $pid -ex "gcore /dev/null" 2>/dev/null
swapon / swapoff akan sepenuhnya menghapus ruang swap Anda, tetapi Anda dapat mengosongkannya melalui sistem file / proc juga. Anda ingin yang pertama:
via http://linux-mm.org/Drop_Caches
sumber
sysctl vm.drop_caches=X
. Juga, sysctl lebih mudah untuk sudo.