Kadang-kadang, kami ingin menunda proses intensif-memori pada server Ubuntu dan OS X kami untuk sementara membebaskan beberapa RAM untuk pekerjaan lain. Jika yang kami khawatirkan adalah penggunaan CPU, cara sederhana Ctrl-Z
akan berhasil. Namun, kita harus dapat membebaskan RAM (dengan menuliskannya ke disk) dan kemudian memulai kembali proses (disk -> RAM) atau dengan kata lain "hibernasi" satu proses. Adakah petunjuk tentang cara melakukan ini? (Lebih disukai dari CLI.) Terima kasih.
22
Jawaban:
Tidak ada fasilitas umum untuk hibernasi satu proses, hanya seluruh sistem.
Namun, jika Anda tidak peduli bahwa gambar proses tidak akan selamat dari reboot, ada fasilitas bawaan untuk menyimpan gambar proses ke disk: bertukar. Pastikan Anda memiliki ruang swap yang cukup, dan jika ada tekanan memori dan prosesnya tidak aktif (misalnya karena ditangguhkan), memorinya akan ditukar.
Jika Anda tahu bahwa proses tersebut kemungkinan tidak aktif untuk waktu yang lama dan bahwa Anda akan memerlukan waktu respons cepat, Anda dapat memaksa banyak RAM untuk dibebaskan sekarang dengan mengalokasikan banyak RAM dalam proses berdurasi pendek, mis
Anda tidak mendapatkan kendali atas apa yang ditukar, jadi proses lain mungkin ditukar. Di Linux, Anda dapat menukar proses kembali dengan secara paksa mengakses halaman yang dipetakannya. Skrip dalam jawaban ini akan melakukan itu: memuat ke memori semua halaman yang dipetakan oleh suatu proses (perhatikan bahwa ini termasuk file yang terbuka; Anda dapat melintasi daerah secara selektif berdasarkan informasi peta untuk menghindari pertukaran data yang Anda tahu Anda tidak perlu , lihat jawaban ini untuk informasi lebih lanjut).
sumber
Istilah yang Anda cari adalah "Pemeriksaan aplikasi ".
Alat yang saya tahu dapat melakukannya adalah CryoPID dan CryoPID2 .
Kedua alat hanya untuk Linux.
Saya tidak tahu alat serupa untuk BSD atau OS X.
sumber
Pastikan Anda memiliki banyak ruang swap. Pastikan sistem Anda diatur untuk lebih suka bertukar halaman tidak aktif ( vm.swappiness = 100 ). Maka harus cukup untuk menunda proses. Kernel akan lebih suka untuk menukar halaman tidak aktif keluar.
sumber
Pada Mac OS X Anda dapat mencoba menggunakan
purge
perintah (disediakan dengan Xcode) untuk membebaskan sebagian (tidak aktif) RAM.sumber
purge
tidak akan membantu di sini. Ini menghapus cache disk, tetapi itu tidak akan menyebabkan memori proses untuk ditukar, dan itu tidak akan membuatnya lebih cepat untuk proses lain untuk mendapatkan RAM.