Menonaktifkan swap adalah ide yang bagus jika
- perangkat lunak Anda dapat menangani kondisi kehabisan memori dengan lancar atau membatasi dirinya sendiri untuk menghindari situasi OOM
- memiliki kinerja yang konsisten sangat penting (ketika sistem Anda bertukar latensi akan meningkat yang dapat menjadi cukup buruk untuk membuatnya tidak berguna secara efektif untuk banyak aplikasi)
Hal semacam ini sering terjadi dengan database. Saya lebih melihatnya dengan database noSQL, tetapi database relasional dapat mengalami tantangan yang sama.
Tidak ada apa pun di OS yang membutuhkan swap untuk berada di sana. Linux menangani hal ini dengan cukup anggun dengan mematikan proses terakhir yang meminta memori. Anda tidak ingin sampai ke titik itu jadi pastikan Anda menyetel Oracle hanya menggunakan ~ 90% dari memori sehingga ada sisa untuk daemon sistem dan margin untuk kesalahan. Memori "bebas" juga digunakan untuk menyangga I/O disk yang merupakan kemenangan kinerja yang sangat besar, jadi mencoba mengonsumsi lebih banyak memori oleh database itu sendiri pada akhirnya akan memperlambat kinerja sistem secara keseluruhan sehingga menjadi kontra-produktif.
Bahkan dengan sistem yang memiliki sebagian kecil dari memori dari pertanyaan apakah aplikasi tersebut adalah database atau cache atau sistem serupa, saya tidak akan melakukan swap secara default pada saat ini.
Otoritas
Sehingga Anda tidak hanya mengandalkan kata-kata saya untuk itu:
Cassandra
Datastax menjelaskan untuk Cassandra:
Anda harus menonaktifkan swap sepenuhnya. Kegagalan untuk melakukannya dapat sangat menurunkan kinerja. Karena Cassandra memiliki banyak replika dan failover transparan, lebih baik replika segera dimatikan saat memori hampir habis daripada ditukar. Ini memungkinkan lalu lintas untuk segera dialihkan ke replika yang berfungsi alih-alih terus mengenai replika yang memiliki latensi tinggi karena pertukaran. Jika sistem Anda memiliki banyak DRAM, penukaran masih menurunkan kinerja secara signifikan karena OS menukar kode yang dapat dieksekusi sehingga lebih banyak DRAM yang tersedia untuk caching disk.
riak
Basho menjelaskan untuk Riak bahwa Anda harus:
Idealnya, Anda harus menonaktifkan swap untuk memastikan halaman proses Riak tidak ditukar. Menonaktifkan swap akan memungkinkan Riak mogok dalam situasi di mana ia kehabisan memori. Ini akan meninggalkan file crash dump, bernama
erl_crash.dump
, di/var/log/riak
direktori yang dapat digunakan untuk menentukan penyebab penggunaan memori.
mysql
Percona duduk di pagar dan memberikan peringatan yang berguna untuk kedua sisi pertanyaan. MariaDB tidak setuju dengan penonaktifan swap:
Sementara beberapa menonaktifkan swap sama sekali, dan Anda tentu ingin menghindari proses database apa pun untuk menggunakannya, sebaiknya tinggalkan beberapa ruang swap untuk setidaknya membiarkan kernel jatuh dengan anggun jika terjadi lonjakan. Memiliki swap darurat tersedia setidaknya memungkinkan Anda beberapa ruang untuk membunuh proses pelarian apa pun.
ServerFault
Jawaban yang diterima dengan baik di sini meliputi:
Saya pribadi menemukan sistem swappy lebih buruk daripada sistem yang macet. Sistem yang macet akan memicu server cadangan siaga untuk mengambil alih lebih cepat. Dan dalam pengaturan aktif-aktif (atau load balanced), sistem yang macet akan dikeluarkan dari rotasi lebih cepat. Kemenangan untuk sistem tanpa pertukaran lagi.
Jawaban itu memiliki 22 suara positif hari ini dan berusia 4 tahun. Anda juga dapat melihat beberapa jawaban lain di sana memuji nilai swap, tetapi tidak ada indikasi bahwa mereka sedang menjalankan database. Mereka juga tidak memiliki banyak suara positif. :)
cumi-cumi
Meskipun mereka tidak secara terang-terangan merekomendasikan untuk menonaktifkan swap, squid guys mengatakan:
Squid cenderung menjadi sedikit memori babi. Ini menggunakan memori untuk banyak hal berbeda, beberapa di antaranya lebih mudah dikendalikan daripada yang lain. Penggunaan memori penting karena jika ukuran proses Squid melebihi kapasitas RAM sistem Anda, beberapa potongan proses harus dipindahkan sementara ke disk. Pertukaran juga dapat terjadi jika Anda memiliki aplikasi lain yang haus memori yang berjalan di sistem yang sama. Bertukar menyebabkan kinerja Squid menurun dengan sangat cepat.
Itulah yang tidak Anda inginkan terjadi pada basis data Anda.
redis
Meskipun redis secara resmi merekomendasikan swap, pengguna tidak membelinya:
Nonaktifkan swap terlebih dahulu - Redis dan swap tidak dapat digabungkan dengan mudah dan ini pasti dapat menyebabkan kelambatan.
hadoop
Seperti yang terlihat dalam jawaban ini dengan suara terbanyak di komunitas hortonworks:
Untuk host budak/pekerja/data yang hanya memiliki layanan terdistribusi, Anda mungkin dapat menonaktifkan swap. Dengan layanan terdistribusi, lebih disukai membiarkan proses/host dimatikan daripada ditukar. Penghentian proses atau host tersebut seharusnya tidak memengaruhi ketersediaan cluster. Dengan kata lain:Anda ingin "gagal dengan cepat" bukan untuk "menurun secara perlahan.
[....]
Untuk master , swap juga sering dinonaktifkan meskipun itu bukan aturan yang ditetapkan dari Hortonworks dan saya berasumsi akan ada beberapa diskusi/ketidaksepakatan. Master dapat diperlakukan seperti Anda memperlakukan master di lingkungan lain, non-Hadoop.
Ketakutan dengan menonaktifkan swap pada master adalah peristiwa OOM (kehabisan memori) dapat memengaruhi ketersediaan cluster. Tapi itu masih akan terjadi bahkan dengan swap dikonfigurasi, hanya akan memakan waktu sedikit lebih lama. Praktik administrator/operator yang baik adalah memantau ketersediaan RAM, lalu memperbaiki masalah apa pun sebelum kehabisan memori. Sehingga menjaga ketersediaan tanpa mempengaruhi kinerja. Maka tidak diperlukan pertukaran.
Saya suka ini karena berbicara tentang aplikasi Java, tetapi mencapai banyak kesimpulan yang sama yang disebutkan di atas tentang database. Juga, disebutkan pemantauan yang sangat membantu dalam menyetel aplikasi berkinerja tinggi. Jika Anda tidak memiliki angka untuk membandingkan semuanya didasarkan pada perasaan yang lebih sulit untuk dibandingkan. Buat grafik untuk setiap metrik terukur - latensi tingkat aplikasi dan throughput hingga CPU, disk, memori, dan grafik jaringan. Itu memberikan sebagian besar data nyata yang harus Anda ambil keputusannya.