Apakah saya perlu ruang swap jika saya memiliki jumlah RAM lebih dari cukup?


91

Dari apa yang saya mengerti, tujuan dari partisi swap di Linux adalah untuk membebaskan beberapa informasi "tidak seperti yang sering diakses" dari RAM dan memindahkannya ke partisi tertentu pada harddisk Anda (dengan biaya membuatnya lebih lambat untuk membaca atau menulis to), pada dasarnya memungkinkan aplikasi aktif lebih banyak dari "memori kecepatan tinggi".

Ini bagus untuk saat Anda menggunakan mesin dengan sedikit RAM dan tidak ingin mengalami masalah jika Anda kehabisan. Namun, jika sistem Anda memiliki 16 GB atau 32 GB RAM, dan dengan asumsi Anda tidak menjalankan database MySQL untuk StackExchange atau mengedit film panjang 1080p penuh di Linux, haruskah partisi swap digunakan?


16
@ mikeserv Kau tahu, aku akan senang menerima kedua surat itu sebagai jawaban hanya untuk efek komedi.
IQAndreas

3
@ Janis - biayanya banyak. Dan Anda dapat dengan mudah melakukannya tanpa menukar bahkan pada mesin 1GB jika Anda menerapkan manajemen memori yang baik. Swap biaya kinerja - ketika Anda memilikinya kernel mau tidak mau akan menggunakannya. Jadi pada 1TB atau disk ukuran apa pun yang membuat partisi swap adalah undangan ke kernel untuk meletakkan halaman memori pada disk, daripada menyimpannya dalam RAM atau menjatuhkannya seluruhnya. Dengan 16GB pengguna biasa tidak akan pernah mendekati menggunakan itu semua - saya punya 24GB RAM dengan 2gb digunakan dan 10GB di-cache (karena saya dl torrent untuk /tmp) setelah 3 hari uptime.
mikeserv

5
@ mikeserv, Anda salah saya takut; Saya terus mengamati metrik disk yang ditampilkan. Selama ada memori bebas, swap belum digunakan, hanya ketika memori diisi, swapping dimulai. Saya pikir itu tergantung pada bagaimana Anda menggunakan komputer Anda; sistem desktop yang shutdown setiap malam jarang akan menemui masalah memori, sistem saya punya waktu hingga berbulan-bulan. Ya, tukar menukar kinerja, tetapi jika tidak ada ruang RAM yang tersisa, sistem Anda dapat terus bekerja. Apa opsi yang Anda miliki? Mungkin Anda bisa menguraikan argumen manajemen memori. Saya menggunakan sistem Linux saya sebagai prakonfigurasi.
Janis

40
@mikeserv bagaimana Anda mengirim komentar yang lebih pendek dari 15 karakter?
user253751

11
@immibis ada 12 ruang lebar nol di sana
dave

Jawaban:


98

Iya.

Anda harus selalu mengaktifkan swap, kecuali jika ada alasan yang sangat kuat dan menakutkan (seperti, tidak ada disk sama sekali, atau hanya disk jaringan yang ada). Haruskah Anda melakukan swap berdasarkan urutan ukuran konyol yang sering direkomendasikan (seperti, dua kali jumlah RAM)? Ya tidak .

Alasannya adalah bahwa swap tidak hanya berguna ketika aplikasi Anda mengkonsumsi lebih banyak memori daripada RAM fisik (sebenarnya, dalam hal itu, swap tidak terlalu berguna sama sekali karena itu berdampak serius pada kinerja). Insentif utama untuk swap saat ini bukan untuk secara ajaib mengubah 16GiB RAM menjadi 32 GiB, tetapi untuk membuat penggunaan RAM yang terpasang dan tersedia secara lebih efisien.

Pada komputer modern, RAM tidak terpakai. RAM yang tidak terpakai adalah sesuatu yang Anda bisa saja tidak membeli dan menyimpan uang sebagai gantinya. Oleh karena itu, apa pun yang Anda muat atau apa pun yang dipetakan dengan memori, apa pun yang mungkin dapat digunakan kembali oleh siapa saja di kemudian hari (dibatasi oleh kendala keamanan) sedang di-cache. Segera setelah mesin boot, semua RAM fisik akan digunakan untuk sesuatu .

Setiap kali Anda meminta halaman memori baru dari sistem operasi, manajer memori harus membuat keputusan yang tepat:

  1. Bersihkan halaman dari cache buffer
  2. Bersihkan halaman dari pemetaan (efektif sama dengan # 1, pada kebanyakan sistem)
  3. Memindahkan halaman yang belum diakses untuk waktu yang lama - lebih disukai tidak pernah - untuk bertukar (ini sebenarnya bisa terjadi secara proaktif, tidak harus pada saat terakhir)
  4. Bunuh proses Anda, atau bunuh proses acak (OOM)
  5. Panik kernel

Opsi # 4 dan # 5 sangat tidak diinginkan dan hanya akan terjadi jika sistem operasi sama sekali tidak punya pilihan lain. Opsi # 1 dan # 2 berarti Anda membuang sesuatu yang mungkin Anda perlukan segera. Ini berdampak negatif pada kinerja.

Opsi # 3 berarti Anda memindahkan sesuatu yang Anda (mungkin) tidak perlu waktu segera ke penyimpanan lambat. Tidak apa-apa karena sekarang sesuatu yang Anda perlukan dapat menggunakan RAM cepat.

Dengan menghapus opsi # 3, Anda secara efektif membatasi sistem operasi untuk melakukan # 1 atau # 2. Reload halaman dari disk sama dengan reload dari swap, kecuali harus memuat ulang dari swap biasanya lebih kecil (karena membuat keputusan paging yang tepat).

Dengan kata lain, dengan menonaktifkan swap Anda tidak mendapatkan apa-apa, tetapi Anda membatasi jumlah opsi berguna sistem operasi dalam menangani permintaan memori. Yang mungkin tidak , tetapi sangat mungkin bisa merugikan (dan tidak akan pernah menjadi keuntungan).

[SUNTING]

Pembaca yang berhati-hati dari halaman mmap manual ini , khususnya deskripsi MAP_NORESERVE, akan melihat alasan bagus lainnya mengapa swap agak diperlukan bahkan pada sistem dengan memori fisik yang "cukup":

"Ketika ruang swap tidak disediakan, orang mungkin mendapatkan SIGSEGV saat menulis jika tidak ada memori fisik yang tersedia."

- Tunggu sebentar, apa artinya itu?

Jika Anda memetakan file, Anda dapat mengakses konten file secara langsung seolah-olah file itu entah bagaimana, secara ajaib, di ruang alamat program Anda. Untuk akses read-only, pada prinsipnya sistem operasi tidak lebih dari satu halaman memori fisik yang dapat diisi ulang dengan data yang berbeda setiap kali Anda mengakses halaman virtual yang berbeda (untuk alasan efisiensi, tentu saja bukan itu yang dilakukan, tetapi pada prinsipnya Anda dapat mengakses data terabyte dengan satu halaman memori fisik). Sekarang bagaimana jika Anda jugamenulis ke pemetaan file? Dalam hal ini, sistem operasi harus memiliki halaman fisik - atau ruang swap - siap untuk setiap halaman yang ditulis. Tidak ada cara lain untuk menjaga data di sekitar sampai proses penulisan kembali halaman kotor telah melakukan tugasnya (yang bisa beberapa detik). Untuk alasan ini, OS cadangan (tetapi tidak selalu melakukan) swap ruang, jadi jika Anda menulis ke pemetaan sementara tidak ada halaman fisik yang tidak terpakai (itu sangat mungkin, dan kondisi normal), Anda kembali dijamin bahwa itu akan tetap bekerja.

Sekarang bagaimana jika tidak ada swap? Ini berarti tidak ada swap yang dapat dipesan (ya!), Dan ini berarti bahwa segera setelah tidak ada halaman fisik gratis yang tersisa, dan Anda menulis ke sebuah halaman, Anda mendapatkan kejutan yang menyenangkan dalam bentuk proses penerimaan Anda kesalahan segmentasi, dan mungkin dibunuh.

[/SUNTING]

Namun, rekomendasi tradisional untuk membuat swap dua kali ukuran RAM tidak masuk akal. Meskipun ruang disk murah, tidak masuk akal untuk menetapkan banyak swap. Membuang-buang sesuatu yang murah masih sia-sia, dan Anda benar-benar tidak ingin terus-menerus masuk dan keluar bekerja menetapkan beberapa ratus megabyte (atau lebih besar) dalam ukuran.

Tidak ada ukuran swap "benar" tunggal (ada banyak ukuran "benar" karena ada pengguna dan pendapat). Saya biasanya menetapkan 512MiB tetap, terlepas dari ukuran RAM, yang bekerja sangat baik untuk saya. Alasan di balik itu adalah bahwa 512MiB adalah sesuatu yang Anda selalu mampu saat ini, bahkan pada disk kecil. Di sisi lain, menambahkan beberapa gigabyte swap tidak ada yang lebih baik. Anda tidak akan menggunakannya, kecuali jika ada sesuatu yang salah.

Bahkan pada SSD, swap adalah perintah yang besarnya lebih lambat dari RAM (karena bandwidth bus dan latensi), dan meskipun sangat dapat diterima untuk memindahkan sesuatu untuk swap yang mungkin tidak akan diperlukan lagi (yaitu kemungkinan besar Anda tidak akan menukarnya lagi, sehingga kumpulan halaman yang tersedia secara efektif diperbesar secara gratis), jika Anda benar - benar membutuhkan sejumlah besar swap (yaitu, Anda memiliki aplikasi yang menggunakan misalnya dataset 50GiB), Anda cukup banyak tersesat.

Setelah komputer Anda mulai menukar halaman gigabytes senilai, semuanya berjalan merangkak. Jadi, bagi kebanyakan orang (termasuk saya) ini bukan pilihan, dan karena itu banyak pertukaran tidak masuk akal.


7
Sama sekali tidak benar: itu bisa menjadi keuntungan bagi kernel untuk tidak menggunakan disk, terutama jika Anda telah mengkonfigurasi OOM untuk spesifikasi Anda. Jika pembunuh OOM dikonfigurasi untuk menangani pembersihan Anda, maka melakukannya daripada membuang-buang ruang disk dan memperlambat mesin Anda menguntungkan.
mikeserv

22
Apa perbedaan antara memiliki 8 GB RAM dan 8 GB swap dan 16 GB RAM dan tidak ada swap? Jika komputer Anda memutuskan bahwa ia membutuhkan memori 16,001 GB, bukankah ia akan mulai membersihkan / membunuh hal-hal yang sama (tetapi kinerjanya akan kawah sebelum mulai terjadi)?
Nick T

5
@NickT: Swap ini bukan untuk lebih banyak RAM melainkan bendera merah sehingga sesuatu akan segera terbunuh. Saya suka memiliki bendera merah sebelum membunuh, daripada memiliki proses "secara acak" menghilang di depan mata saya.
Mooing Duck

10
-1 jawaban ini tidak masuk akal. Mengapa sih memiliki memori yang lebih lambat (swap) memiliki kinerja yang lebih baik daripada jumlah memori yang lebih cepat (RAM) ?? pada titik tertentu Anda harus mengakui RAM yang cukup berarti tidak perlu swap ..
Mehrdad

14
@Mehrdad: Ini tentu saja masuk akal. Memori lebih lambat (swap) meningkatkan kinerja sejauh "lambat" tidak masalah untuk hal-hal yang jarang Anda akses atau tidak pernah. Swap secara efektif meningkatkan jumlah memori yang tersedia untuk data "panas" dengan memindahkan data "dingin". Daemon yang hanya menjalankan sesuatu sekali per jam atau memori yang dialokasikan oleh modul kernel yang dimuat secara default tetapi tidak pernah digunakan adalah contohnya. Anda bisa menukar itu , atau Anda bisa menjatuhkan halaman dari cache. Mana yang lebih baik?
Damon

50

Saya akan tidak setuju dengan beberapa pendapat yang saya lihat di sini. Saya masih akan membuat partisi SWAP terutama di lingkungan produksi. Saya melakukannya untuk mesin rumahan dan VM saya juga.

Hari ini saya mengukur mereka sekitar 1-1,5 kali memori. Memori 2 kali menjadi aturan praktis. Disk swap "murah" karena tidak perlu dicadangkan atau dilindungi.

Jika Anda kehabisan memori, maka ruang swap Anda memberi Anda sedikit waktu dan bantal untuk mengatasi masalah tersebut.

Sadarilah bahwa hal-hal seperti / tmp dapat berada di ruang swap.

Area swap dapat menampung sebagian dump kernel sehingga dapat dipulihkan pada reboot berikutnya. Ini mungkin baik untuk beberapa darurat debugging mendatang yang harus Anda lakukan.


16
+1. Memiliki swap berarti perbedaan antara kinerja yang terluka di bawah memori rendah dan kerusakan parah.
Davidmh

6
@ mikeserv tidak peduli bagaimana Anda mengonfigurasinya, jika program Anda mencoba mengalokasikan lebih banyak memori daripada yang tersedia, ada sesuatu yang akan macet, atau OS akan mulai membunuhnya.
Davidmh

6
@ Davidvid: Dengan alasan itu file swap Anda harus sangat besar, jika tidak, program Anda masih macet ketika mereka menghabiskan file swap.
Mehrdad

6
@Mehrdad tetapi juga lebih mahal. Mengingat Anda memiliki X GB RAM, karena sebanyak yang Anda mampu, itu benar-benar lebih buruk daripada memiliki X GB RAM dan Y swap, untuk beberapa nilai Y yang masuk akal (yang akan tergantung pada penggunaan dan ukuran Anda HD Anda).
Davidmh

9
"ruang swap Anda memberi Anda sedikit waktu dan bantal untuk mengatasi masalah" - Ini juga berarti saya harus duduk lebih lama di depan mesin yang tidak responsif sampai kebocoran memori "memecahkan" itu sendiri.
Raphael

23

Mungkin:

Saya telah memberikan banyak pemikiran untuk topik ini dan melihat pendapat yang muncul di kedua sisi argumen lebih dari yang saya bisa hitung. Pendekatan saya adalah mengembangkan cara untuk mencari tahu.

Mulailah dengan partisi swap aktif yang menurut Anda merupakan ukuran yang cukup.

Kemudian, buka terminal di ruang kerja dan keluarkan perintah free -hs 1yang akan melaporkan penggunaan setiap detik.

Secara opsional beralih ke ruang kerja lain.

Lakukan segala hal yang mungkin pernah Anda lakukan dan kemudian lakukan lagi. Jalankan semua aplikasi umum Anda sekaligus, jelajahi banyak tab dan cobalah dengan susah payah untuk memberikan sistem latihan yang nyata bagi Anda ini mungkin berarti meng-enkode ulang 1/2 lusin video sambil menjalankan operasi kompilasi dan memeriksa email Anda atau apa pun. Mari kita hadapi fakta, ini semua tentang bagaimana Anda menggunakan sistem Anda.

Ketika Anda merasa memiliki sistem di bawah beban tinggi (atau setinggi yang mungkin Anda dapatkan dan kemudian beberapa) lihat terminal dan periksa hasilnya. atau lebih baik lagi mengarahkan output ke file dengan menambahkan >output.txtperintah sehingga Anda dapat memeriksa menjalankan penuh. Jika Swap Anda digunakan tidak pernah melebihi Mem gratis Anda tidak perlu swap. Jika ya, Anda lakukan. gratis.png

Saya tidak perlu swap. Mungkin Anda lakukan. Kenapa tidak mencari tahu?

Sejauh menyangkut pertukaran ukuran, Aturan praktis biasanya dinilai terlalu tinggi karena ini adalah pertanyaan berbasis penggunaan.


2
Jadi, apakah Anda mengatakan bahwa swap hanya pernah digunakan ketika sistem Anda benar-benar membutuhkannya? Dalam hal ini, apakah pernah ada penalti jika swap diaktifkan - untuk berjaga-jaga? Komentar lain tampaknya menunjukkan bahwa kehadiran swap dapat merusak kinerja?
MrWhite

3
@ w3d Tidak, saya tidak mengatakan itu. Seperti yang Anda lihat dari output saya di atas, swap digunakan bahkan jika tidak diperlukan. ini bisa disesuaikan dengan faktor swappiness. Saya berbicara tentang perlunya pertukaran atau tidak.
Penatua Geek

Bisakah Anda skrip ini untuk meningkatkan swap ke atas kapan saja swapberlalu free?
JFA

@ JFA saya belum melihat ini selesai. Secara pribadi saya mengalami kesulitan dengan konsep pemesanan ruang swap yang jumlahnya tidak terbatas untuk tujuan ini. Secara teoritis semua hal adalah mungkin. Ini adalah fase implementasi yang menjadi menarik.
Penatua Geek

17

CATATAN: Ini terjadi pada saya, dalam situasi spesifik dan tidak biasa. Jika Anda memecahkan masalah, ini mungkin berguna. Saya tidak bermaksud mengatakan bahwa SEMUA mesin HARUS memiliki swap.

MUNGKIN!

Saya telah mengalami masalah di masa lalu dengan "alat" yang saya buat, menjalankan Linux - berjalan pada perangkat flash yang ringkas, saya tidak ingin memakai CF saya dengan menggunakan swap, dan ada cukup memori untuk aplikasi tersebut.

Sebagian besar peralatan ini bekerja dengan baik, tetapi pada kotak yang sangat sibuk, saya mengalami masalah:

FRAGMENTASI MEMORI

Tanpa swap space, memori berangsur-angsur menjadi semakin terfragmentasi, terutama dengan proses yang berjalan lama (meskipun saya memiliki banyak memori bebas, semuanya dalam bit yang sangat kecil). Saya menaruh beberapa ruang swap, dan memberi tahu Linux untuk tidak menggunakannya kecuali harus; ini menyelesaikan masalah sepenuhnya.

Selain yang lainnya, ruang swap memungkinkan memori untuk dipindahkan, mendefragmentasi. Jika Anda memiliki memori yang terfragmentasi, dan Anda membutuhkan satu potongan besar, fragmen akan ditukar; ketika mereka ditukar kembali, mereka secara efektif didefragmentasi.

Lihat / proc / buddyinfo - milikku terlihat seperti ini sekarang:

Node 0, zone      DMA      9      5      3      4      2      3      2      2      3      3      1 
Node 0, zone    DMA32  33901   1149      0      0      0      0      0      0      0      0      1 
Node 0, zone   Normal   2414   1632    259     22      3      0      2      0      1      1      0 

Angka-angka mewakili blok dengan ukuran yang berbeda; setiap ukuran adalah setengah dari ukuran blok berikutnya, dari 4mb blok di sebelah kiri, ke 4kb di sebelah kanan (yaitu, 4mb, 2mb, 1mb, dan sebagainya). Mesin yang baru boot harus memiliki semua blok di sebelah kiri, sangat sedikit di sebelah kanan (= tidak terfragmentasi). Ingat juga bahwa jumlah memori yang sama (misalnya 4mb) akan direpresentasikan sebagai angka yang berbeda di seluruh kolom - 1 blok di kolom paling kiri, 1024 di kolom paling kanan.

Memori dialokasikan dari kolam yang sejauh mungkin; mis. jika program Anda menginginkan memori 12kb (dalam sekali jalan), itu akan diambil dari kolom 16kb; sisanya akan muncul di kolom 4kb. Jika tidak ada blok 16kb, maka itu akan mengambil dari blok 32kb, menghasilkan 16kb dan 4kb tersisa, dan seterusnya.

Jika tidak ada blok memori yang cukup besar, DAN ANDA MEMILIKI RUANG SWAP, maka mis. Jika Anda ingin 16kb memori, itu akan menemukan blok 16kb yang paling jarang digunakan (yang mungkin, misalnya berisi blok yang digunakan 4kb, blok yang tersedia 4kb, dan 2 blok 4kb lebih banyak digunakan), pindahkan bagian yang DIGUNAKAN hanya untuk bertukar, dan mengalokasikan memori yang dibebaskan ke aplikasi baru.

Dalam kotak yang jatuh, saya memiliki ratusan ribu blok 4kb dan 8kb, dan tidak banyak lagi.

SEPERTI JAUH SAYA DAPAT MENGATAKAN (pergi oleh mesin crash!) Kernel akan bergerak dari memori ke swap, dan swap ke memori, tetapi tidak akan pernah pindah dari memori ke memori.


3
Kasing Anda terlihat bagus untuk mengalokasikan / mengimplementasikan hugepage. Ini akan menghindari masalah fragmentasi (karena hugepage dengan ukuran tertentu, setelah dialokasikan, untuk selanjutnya akan selamanya dialokasikan lagi hanya dalam ukuran itu) .
mikeserv

2
Itulah alasan terbaik yang pernah saya baca untuk menggunakan partisi swap. Saya mencoba pencarian cepat dan tidak menemukan referensi tentang itu, saya bertanya-tanya mengapa fitur ini tidak lebih sering didokumentasikan.
Ke 마 SE

1
hugepage (tidak transparan) mungkin tidak dapat digunakan oleh aplikasi Anda. Biasanya aplikasi yang membutuhkan banyak memori dapat menggunakannya; misalnya, server basis data, java jvm. Mereka harus diaktifkan secara eksplisit, dan mereka menjadi kumpulan memori terpisah yang tidak dapat digunakan untuk tujuan lain. Ini mungkin baik atau mungkin buruk, tergantung pada keadaan Anda. Juga, pelajari tentang hugepage transparan. Upaya ini untuk memindahkan hal-hal sehingga Anda menggunakan hugepage (untuk peningkatan kinerja mereka) meskipun aplikasi Anda tidak tahu caranya. Jika memori terfragmentasi, hal-hal dapat pergi ke selatan karena penyapu hugepage memiliki lebih banyak hal untuk dilakukan.
Dan Pritts

1
Saya tidak meragukan pengalaman Anda dengan alat flash Anda, saya hanya tidak yakin bahwa case use tunggal yang Anda sajikan sama dengan mungkin memerlukan swap dan saya tetap tidak yakin bahwa fragmentasi memori terkait dengan swap atau tidak. Itu memang memunculkan pertanyaan menarik yang bisa dengan mudah diuji dan dibuktikan atau dibantah.
Penatua Geek

1
Pertanyaan tindak lanjut . Apa yang Anda maksud dengan "fragmentasi memori"? MMU tidak peduli apakah halaman fisik yang digunakan untuk halaman berturut-turut di beberapa ruang alamat virtual berturut-turut atau tidak. Halaman fisik terfragmentasi, tetapi ini tidak masalah (selama kita berbicara memori aplikasi biasa pada mesin fisik satu-cluster dan bukan misalnya halaman memori yang digunakan oleh periferal atau hypervisor). Ketika sebuah program meminta 16kB, ia mendapat empat halaman, yang mungkin atau tidak bisa berdekatan dalam memori fisik.
Gilles

15

Partisi swap memiliki nilai signifikan di atas dan di luar hanya bertindak sebagai beberapa RAM tambahan ketika Anda kehabisan.

Untuk satu, Linux menggunakan memori sebanyak mungkin untuk cache file dan operasi IO, jika Anda memiliki beberapa swap Anda mungkin menemukan bahwa lebih banyak memori masuk ke caching IO dan membuatnya lebih cepat (dengan meminimalkan akses disk dan juga menurunkan keausan pada SSD) sebagai lawan untuk menyimpan data yang telah dialokasikan beberapa program tetapi hanya menggunakan sekali setiap 12 jam yang mungkin berlaku untuk beberapa daemon.

Selain itu, Linux menggunakan strategi alokasi memori yang optimis dengan mana ia akan memungkinkan halaman untuk dialokasikan secara nominal bahkan jika tidak yakin itu memiliki memori nyata untuk mengisinya. Ini lebih efisien daripada melakukan pengecekan yang tepat dan memetakan setiap alokasi dan biasanya tidak menimbulkan masalah. Namun, heuristik yang digunakan kernel untuk menentukan apakah memungkinkan alokasi masuk akal termasuk tingkat swap yang tersedia pada sistem, oleh karena itu alokasi mungkin lebih cepat jika sistem memiliki banyak swap, bahkan jika itu tidak banyak digunakan.

Faktor-faktor ini bersama-sama membuat saya percaya secara pribadi bahwa lebih baik memiliki beberapa swap pada hampir setiap sistem normal namun untuk ukuran ram besar saya mengabaikan aturan ram * 2 dan cukup membatasi swap pada 4-8GB (tergantung pada ukuran disk ).


9
Bahkan 4GB terlalu besar untuk desktop. Saya lebih suka mengaktifkan pembunuh OOM sebelum menunggu pertukaran yang banyak untuk mengisi jika terjadi kesalahan. (Jika saya pernah menemukan kasus di mana saya membutuhkan lebih banyak, saya bisa menemukan dan mengganti swap FILE sebelum menjalankan pekerjaan besar apa pun yang membutuhkan lebih banyak memori virtual daripada mesin saya yang memiliki RAM. Artinya, jika keluar dari browser web saya tidak cukup membebaskan. ...)
Peter Cordes

@PeterCordes Itu mungkin tergantung pada jenis tugas yang Anda lakukan, saya sepenuhnya mengerti. Secara pribadi, saya merasa mendapat manfaat dari swap tingkat tinggi karena saya sering melakukan kompilasi panjang dengan prioritas rendah di latar belakang saat menggunakan mesin saya, ini kemudian terhapus ketika memori dinyatakan ketat (biasanya ketika mesin terlalu sibuk untuk melakukan kompilasi apa pun) bagaimanapun). Namun, saya setuju itu adalah hal berbasis beban kerja yang sangat pribadi, orang harus selalu berpikir tentang penggunaannya sendiri sebelum memutuskan.
Vality

1
cerita lucu: hanya hari ini, di laptop saya dengan 4GB RAM, swap 0,5G (SSD), firefox memicu pembunuh OOM (yang mengambil firefox). Saya belum pernah mengalami itu sebelumnya. (Meskipun saya menggunakan laptop saya lebih dari biasanya). Hampir tidak ada lagi yang berjalan (hanya gnome-terminal di xfce). Jadi saya pikir saya setuju, karena firefox seharusnya tahu lebih baik daripada mengikat begitu banyak RAM. Saya melihat seseorang mengatakan beberapa saat yang lalu "browser web ada untuk menguji-stres subsistem memori virtual", atau sesuatu seperti itu. Firefox sangat buruk dalam membebaskan cache untuk tab yang belum digunakan selama berhari-hari, dll.
Peter Cordes

3
Satu kasus di mana Linux mempertimbangkan ruang swap yang tersedia adalah ketika sebuah proses besar mencoba untuk meluncurkan anak: fork () + exec () panggilan sistem dimulai dengan secara kasar menduplikasi alokasi induk - kernel tidak dapat menjamin bahwa anak baru akan lebih kecil dari pada orang tua. Ruang swap biasanya tidak digunakan, tetapi kecuali jika tersedia fork () mungkin gagal. Contoh khas pada klien adalah browser yang memulai plug-in, atau pada server ketika wadah aplikasi besar memanggil program pembantu. 1/2 atau 1GiB swap biasanya cukup untuk menyelesaikan masalah. Google "java exec tidak dapat mengalokasikan memori"
James

13

Anda seharusnya tidak pernah memiliki swap lebih besar dari ukuran maksimum yang Anda bisa toleransi menunggu kernel untuk swap masuk / keluar; jika tidak, Anda hanya membuat mode kegagalan baru untuk sistem Anda (menjadi macet dalam pertukaran). Perhatikan bahwa, meskipun drive modern dapat mentransfer pada urutan GB / detik, Linux biasanya hanya dapat memindahkan swap pada tingkat yang lebih banyak di sepanjang garis ratusan kB, atau paling baik beberapa MB, per detik. Jadi swap yang besar dapat membuat sistem Anda tidak dapat digunakan selama beberapa menit, jam, atau bahkan berhari-hari.

Jika Anda memiliki memori fisik yang cukup untuk apa yang Anda lakukan, ukuran ideal untuk swap adalah mencocokkannya dengan jumlah proses "data sampah" yang dipertahankan tetapi tidak pernah digunakan. Ini mungkin dalam kisaran beberapa hingga beberapa ratus megabyte. Strategi ini memungkinkan semua memori fisik Anda digunakan untuk menyimpan informasi yang berguna dan bukan sebagai penyimpanan permanen untuk data yang kemungkinan tidak akan pernah digunakan lagi.

Jika Anda tidak memiliki memori fisik yang cukup, Anda perlu mengevaluasi apakah Anda dapat mentolerir perlambatan parah dari pertukaran besar. Jika demikian, memiliki swap hingga 1-2 GB mungkin masuk akal, dan mungkin hingga 4 GB jika Anda memiliki drive yang sangat cepat. Tetapi lebih dari itu hanya akan membuat mode kegagalan sistem Anda lebih buruk, dan Anda harus mempertimbangkan hanya membeli lebih banyak RAM saja.


2
Saya pikir ini adalah jawaban terbaik. Jika Anda memiliki terlalu banyak ruang swap, itu dapat membuat mesin benar-benar tidak responsif karena semua pertukaran. Itu berarti Anda tidak dapat membunuh proses yang menyinggung. Jika Anda mengurangi ruang swap, pembunuh OOM akan secara otomatis melakukan pekerjaan Anda untuk Anda. Argumen dalam jawaban lain tentang cache buffer file sama sekali tidak meyakinkan. Anda harus memiliki swap sehingga kernel dapat memindahkan file buffer untuk bertukar ... yang ada di disk? Silahkan.
Timmmm

Satu-satunya argumen terhadap ruang swap yang dapat saya temukan adalah ini: "beberapa program kebocoran memori". Dan? Jika pembunuh OOM membunuh hal penting yang tidak Anda selamatkan, Anda secara efektif kehilangan pekerjaan Anda. Yang berarti bahwa argumen ini menjadi sama sekali tidak relevan, saya hanya bisa memaksa shutdown mesin saya untuk memiliki efek yang sama persis sementara masih memiliki ruang swap yang tinggi untuk tugas-tugas prioritas rendah yang menggunakan banyak memori dan sering diganti. Jika mesin Anda macet dalam kondisi seperti itu, itu adalah kesalahan Anda sendiri. Satu-satunya saat itu terjadi pada saya adalah ketika saya sendiri menulis sebuah program untuk mengisi seluruh memori kerja.
Sahsahae

11

Hanya jika Anda ingin dapat hibernate untuk bertukar (Fitur ini juga disebut "menangguhkan ke disk" dan melibatkan menyimpan seluruh isi RAM dan mematikan daya). Biasanya ini hanya digunakan pada laptop dan perangkat seluler lainnya, jadi itu tergantung.


6

Tidak ada jawaban universal dan jelas karena itu tergantung pada tugas yang akan Anda lakukan. Jika Anda akan menjalankan server DB, HTTP, Virtualisasi atau Cache, Anda tidak boleh mengaktifkan segala jenis swap, terlepas dari jumlah ram yang Anda miliki. Jika Anda memiliki host desktop atau tugas campuran dan Anda memiliki RAM cepat 16+ Gb - lihat di sini: zRam


zRam adalah pilihan bagus. Saya telah menggunakannya bersama dengan sistem flash drive kecil untuk efek yang baik.
Penatua Geek

1
@ElderGeek Saya juga menggunakannya di lingkungan tanpa disk, misal boot jaringan. Kerja bagus, tapi ada beberapa peringatan: pertama, Anda tidak perlu hanya ram, Anda perlu yang CEPAT. Modul ram lambat dan murah, yang mungkin cocok dengan Anda dalam kasus klasik biasa, dapat menyebabkan masalah. CPU Front-Side bus juga harus diperhitungkan: bahkan jika Anda dapat memiliki frekuensi CPU yang lebih lambat tetapi frekuensi FSB yang lebih cepat akan sangat meningkatkan kinerja Anda. Kekhawatiran kedua adalah sejumlah partisi swap zRam. Coba angka dari 1 hingga nomor inti CPU Anda. Jangan gunakan pada sistem inti tunggal!
Alexey Vesnin

Poin valid bagus semua. Karena saya seorang geek kinerja dan selalu merancang dan membangun sistem saya sendiri, saya pribadi tidak terganggu dengan masalah seperti itu
Penatua Geek

@ElderGeek saya juga :) senang bertemu dengan Anda! Saya juga memperhatikan satu hal aneh dalam perilaku zRam. Ini muncul dan menghilang dalam versi dan konfigurasi kernel yang berbeda, tetapi sangat dapat direproduksi pada kernel HZ 100 dan 1000. zRam berfungsi dengan baik untuk 1,2,4 - tetapi tidak lebih banyak partisi. Bahkan pada 8 dan 16 core fisik pada perangkat keras teratas pada tugas-tugas yang hampir kosong. Jadi perlu diingat bermain dengan tweak! Salam dari Rusia!
Alexey Vesnin

Saya tidak setuju dengan "jika Anda menjalankan db, ... Anda seharusnya tidak pernah mengaktifkan segala jenis swap, terlepas dari ram mount yang Anda miliki". Swapping biasanya lebih baik daripada pembunuh OOM membunuh proses acak. Ya, Anda harus memiliki memori yang cukup untuk aplikasi yang Anda jalankan, dan ya, menggunakan swap dalam jumlah besar dapat memperlambat sistem Anda. Saya iri Anda hidup di dunia yang ideal.
AMADANON Inc.

5

Tidak ada cara untuk mengetahui apakah Anda perlu ruang swap atau tidak jika satu-satunya parameter yang kita tahu adalah jumlah RAM yang diinstal.

Dalam setiap kasus, ada kesalahpahaman umum bahwa memiliki ruang swap secara negatif mempengaruhi kinerja sistem. Ini salah. Selama Anda memiliki RAM yang cukup, memiliki area swap berapa pun ukurannya tidak mengganggu kinerja sama sekali. Apa yang mempengaruhi kinerja adalah kekurangan RAM dan secara efektif menggunakan ruang swap.

  • kasus 1: Jika Anda tidak memiliki ruang swap dan kebetulan kehabisan RAM, kernel Linux akan memilih satu atau lebih proses yang dianggap sebagai kandidat yang baik dan membunuh mereka.

  • kasus 2: Jika Anda memiliki ruang swap dan kehabisan RAM, kernel akan memilih halaman memori yang kurang digunakan dan meletakkannya di area swap untuk membebaskan RAM. Ini akan memperlambat sistem tetapi aplikasi Anda tidak akan terpengaruh sebaliknya.

Saya selalu lebih suka case 2, karena saya merasa tidak nyaman kehilangan bagian atau semua pekerjaan saya karena kernel berpikir aplikasi saya layak untuk dibunuh. Selain itu, dengan ukuran disk rata-rata saat ini berada dalam kisaran TB, pemesanan beberapa persen untuk swap seharusnya tidak menjadi masalah.


6
Saya lebih suka case 1, karena satu-satunya waktu saya kehabisan RAM adalah ketika saya punya program pelarian. Pembunuh OOM pada umumnya cukup bagus dalam mengidentifikasi pelarian, dan saya lebih suka membunuhnya segera daripada setelah beberapa jam bertukar berat.
Markus

1
@ Mark, Itu poin yang valid. Saya masih mencoba untuk menghindari mendelegasikan algoritma menembak terlebih dahulu, pikirkan pendekatan kemudian.
jlliagre

2
case 2 hanya valid jika Anda memiliki sesuatu yang memperingatkan Anda tentang situasi ini, dan punya cukup waktu untuk "melakukan sesuatu" secara manual sebelum sistem kehabisan swap. Tapi Anda bisa memantau persentase RAM yang digunakan untuk hasil yang sama.
Totor

1
Berdasarkan alasan Anda, memantau penggunaan RAM sudah cukup .
Totor

1
@ Motor Saya lebih suka tidak dibangunkan di tengah malam oleh aplikasi pemantauan laptop saya karena saya meluncurkan batch yang memproses banyak file dan menghabiskan RAM. Saya lebih suka pekerjaan yang harus dilakukan, bahkan jika itu memakan waktu beberapa jam lebih karena RAM yang terlalu kecil daripada seluruh hal terganggu.
jlliagre

3

Aturan saya untuk menerapkan swap di sistem apa pun adalah memiliki jawaban untuk ini:

  • Apa tujuan sistem?
  • Berapa banyak memori yang akan dikonsumsi aplikasi?
  • Apakah ini sistem yang kritis?
  • Apakah saya memerlukan ruang disk sementara untuk transfer file?
  • Tingkat pertumbuhan aplikasi yang diprediksi?

Ketika saya mendapatkan jawaban untuk informasi ini, saya mengukur sistem sesuai dengan itu. Pada tahun-tahun sebelumnya saya melakukan aturan praktis dari Sun Microsystem. Hingga 16 GB RAM dua kali lebih banyak untuk SWAP, dari 16 GB jumlah yang sama. Tetapi di sisi lain, jika Anda memiliki RAM yang cukup dan aplikasi Anda tidak menggunakan SWAP secara paksa, Anda dapat menghilangkan swap. Jika Anda hanya perlu menempatkan disk atau lun baru dan mengkonfigurasi SWAP. aturan Sun diterapkan terutama karena pada Solaris dalam kasus "kernel panik" memori akan dibuang seluruhnya untuk ditukar untuk analisis lebih lanjut.


1

Swap akan diperlukan jika Anda tidak memiliki RAM yang cukup untuk menjalankan semua program Anda.

Anda mengatakan Anda tidak melakukan apa pun yang membutuhkan banyak RAM. Jadi, Anda memiliki cukup RAM.

Maka, Anda tidak perlu ruang swap.

Tetapi , jika Anda berpikir bahwa pada titik tertentu, terlepas dari apa yang Anda maksudkan dalam pertanyaan Anda, program Anda akan menggunakan, katakan lebih dari setengah (atau dua pertiga) RAM Anda (aturan praktis), maka silakan baca yang lain "pro-swap "jawaban. Anda tidak perlu swap, tetapi itu bisa meningkatkan kinerja sistem Anda.


Menggunakan swap dapat membantu menghindari tabrakan katastropik tetapi tidak akan pernah meningkatkan performa, lebih dari parasut akan mempercepat ferrari. ;-)
Penatua Geek

@ElderGeek Ini mungkin kasus tepi, tetapi swap dapat membantu. Ada saat-saat di mana Anda hanya memiliki RAM yang cukup untuk semuanya, tetapi program-program idle dapat ditukar untuk membuat penggunaan RAM yang lebih baik (misalnya, beberapa cache disk yang berguna). Saya sering melihat ini di akhir 90-an. Saya melihat ini kadang-kadang sekarang ketika saya memiliki <1GB RAM gratis (termasuk cache disk), tanpa benar-benar membutuhkan ruang swap.
jbo5112

@ jbo5112 Saya tidak akan mengesampingkan kemungkinan sepenuhnya jika Anda berkata begitu, pengalaman saya telah menunjukkan sebaliknya sejauh ini. Ini tidak terlalu mengejutkan karena ini adalah kasus bagaimana sistem digunakan lebih dari aturan yang keras dan cepat (yang tampaknya dicari semua orang).
Penatua Geek

@ElderGeek Saya hanya dapat melihatnya sekarang karena disk saya berumur satu dekade dan sangat membutuhkan cache. Biasanya ada masalah tambahan swappiness yang ditetapkan terlalu tinggi untuk hampir semua kasus, yang menyebabkan ruang swap digunakan terlalu agresif. Menjatuhkan nilai dari 60 ke 10 tampaknya merupakan rekomendasi umum. Anda bahkan bisa lebih rendah, tetapi pada titik tertentu Anda akan membuang terlalu banyak cache disk, menyebabkan banyak I / O ekstra saat bertukar.
jbo5112

@ jbo5112 Poin bagus. Itu selalu merupakan tindakan penyeimbangan antara berbagai subsistem. Saya ingat kembali pada hari menyesuaikan thimgs seperti interleave hard disk dan kecepatan refresh RAM untuk memeras kinerja maksimal dari 80.286 sistem dengan Seagate ST225 dan ST238 drive. Kami selalu harus mendekati berbagai hal berdasarkan kasus per kasus untuk menekan kinerja dan keandalan maksimum. Selamat btw! Terakhir kali saya bisa memeras satu dekade dari drive itu adalah Micropolis yang memegang total 600MB.
Penatua Geek

0

Jawaban singkatnya:

Ya, Anda selalu perlu swap, hanya dalam kasus tidak seperti aplikasi yang bahkan tidak repot memetakan memori tetapi memetakan memori virtual secara langsung.

Setel file swap Anda ke:

  • RAM+round(sqrt(RAM)) jika Anda menggunakan hibernasi
  • round(sqrt(RAM)) jika tidak

Atur swappiness10 Anda di desktop, tetapi tidak di server!

Jawaban panjangnya:

Di masa lalu:

Aturan praktis yang digunakan selama 25 tahun terakhir adalah minimum 1xRAM dan 2xRAM maksimum sehingga itulah yang akan Anda lihat dikutip sepanjang waktu.

Minimum itu diatur kembali di zaman batu ketika saya masih remaja dan dinosaurus masih berkeliaran di Bumi dan karena RAM terlalu mahal dan Anda benar-benar membutuhkan ruang swap untuk dapat mencapai apa pun.

Maksimum ditetapkan pada waktu itu karena pengembalian menurun: terlalu lambat untuk menukar begitu banyak memori karena akses HDD adalah faktor 1000 lebih lambat daripada RAM: bagus dalam keadaan darurat, tetapi tidak terlalu bagus untuk penggunaan sehari-hari! Pada saat itu, ketika Anda kehabisan ruang swap, sudah waktunya untuk menambahkan lebih banyak RAM! (yang masih berlaku sampai sekarang).

Pada saat ini:

  1. Jika Anda tidak menggunakan hibernasi dan memori Anda melebihi 1GByte, aturan praktis yang baru adalah di round(sqrt(RAM))mana RAMjelas ukuran RAM Anda dalam GB.

  2. Jika Anda menggunakan hibernasi, Anda harus dapat menukar seluruh jumlah RAM + RAM yang telah ditukar ke disk, sehingga rumusnya menjadi: RAM+round(sqrt(RAM))

  3. Aturan untuk mengurangi pengembalian masih berlaku sampai hari ini, tetapi kecuali jika Anda menguji penggunaan Anda yang sebenarnya, mengambil 2xRAM hanya membuang-buang ruang disk , jadi jangan gunakan maksimum kecuali jika Anda kehabisan ruang swap menggunakan metodologi lain .

Semua ini bersama-sama memberi Anda tabel berikut: (3 kolom terakhir yang menunjukkan ruang swap)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB

Di atas hanyalah aturan praktis; itu bukan hukum gravitasi!
Anda dapat melanggar aturan ini (tidak seperti hukum gravitasi) jika use case khusus Anda berbeda!

Pro tip: Selalu alokasikan SWAP pada awal HDD karena kepala harus bergerak lebih sedikit di bagian dalam disk.
Ya: Pada SSD, tidak menjadi masalah lagi di mana Anda menemukan area swap karena mereka menggunakan tunneling kuantum alih-alih memindahkan kepala dan SSD modern menggunakan semua sel memori mereka (bahkan ruang yang tidak dialokasikan) untuk mencegah degradasi kuantum.

Cara menguji apakah penggunaan swap Anda berbeda dengan aturan "generik":

Eksekusi saja:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

yang akan memberi Anda daftar semua program yang sedang berjalan yang ditukar (dengan yang menggunakan ruang swap paling banyak di atas)

Jika Anda menggunakan lebih dari beberapa KB: ubah ukuran menjadi lebih dari minimum, jika tidak, jangan repot-repot ...

Jika Anda berada di server berhenti membaca sekarang: Anda siap!


Jika Anda menggunakan klien desktop / laptop (bukan server), Anda ingin GUI Anda menjadi set responsif mungkin dan hanya bertukar ketika Anda benar-benar perlu . Ubuntu telah dioptimalkan untuk bertukar lebih awal untuk penggunaan server, tetapi pada klien Anda, Anda ingin mengedit gambar mentah berukuran besar 250-Mega gimpmenjadi cepat , sehingga pengaturan Anda swappinesske 10 akan menjaga kernel dari swapping terlalu dini, sambil memastikan itu tidak t tukar terlambat:

sudo nano /etc/sysctl.conf

dan tambahkan:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

ke akhir file, simpan file ( Ctrl+ XY+ Enterdi nano) dan jalankan:

sysctl --system

untuk memuat ulang parameter atau hanya demi waktu lama, ambil pendekatan Window $ dan reboot ... :-)


-1

Jawaban kompromi: itu tergantung pada arti "harus".

Apakah Anda memerlukan partisi swap dalam arti bahwa sesuatu yang buruk akan terjadi jika Anda tidak memilikinya di bawah kondisi operasi yang Anda jelaskan? Tidak.

Adalah bijaksana untuk memiliki partisi swap untuk berjaga-jaga jika Anda secara tidak sengaja menelurkan pasukan memory hogs sehingga Anda memiliki kesempatan untuk membunuh mereka sebelum pembunuh OOM menendang? Iya.

Jika RAM fisik Anda "sangat" melebihi penggunaan memori data semua program yang akan Anda jalankan secara bersamaan setiap saat, maka tidak ada manfaat kinerja untuk memiliki swap. Jika melebihi, tetapi tidak "sangat", mungkin ada manfaat kinerja jika OS dapat menukar memori yang jarang digunakan untuk menyimpan lebih sering diakses -file data- dalam memori.

Singkatnya, hebatnya Anda memiliki RAM 16GB. Tetapi, jika Anda juga memiliki disk 1TB, tidak bisakah Anda memesannya hingga 16GB? Hanya 1,5% dari disk.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.