Haruskah saya sepenuhnya mematikan swap untuk server web linux?

22

Baru-baru ini teman saya mengatakan kepada saya bahwa itu adalah ide yang baik untuk mematikan swap pada server web linux dengan memori yang cukup. Server saya memiliki 12 GB dan saat ini menggunakan 4GB (tidak termasuk cache dan buffer) di bawah beban puncak.

Argumennya adalah bahwa dalam situasi normal server tidak akan pernah menggunakan semua RAM-nya sehingga satu-satunya cara untuk menghadapi situasi OutOfMemory adalah karena beberapa bug / ddos ​​/ etc. Jadi dalam hal pertukaran diaktifkan off sistem akan kehabisan memori yang akhirnya akan crash memori program memonopoli (kemungkinan besar proses server web) dan mungkin beberapa proses lainnya. Dalam kasus swap diaktifkan padaitu akan memakan RAM dan swap dan pada akhirnya akan menghasilkan crash yang sama, tetapi sebelum itu ia akan membongkar proses penting seperti sshd untuk swap dan mulai melakukan banyak operasi swap yang mengakibatkan perlambatan besar. Dengan cara ini ketika di bawah sistem DDoS dapat masuk ke kondisi yang sama sekali tidak dapat digunakan karena keterlambatan yang sangat besar dan saya mungkin tidak akan dapat login dan mematikan proses server web atau menolak semua lalu lintas masuk (semua kecuali ssh).

Apakah ini benar? Apakah saya kehilangan sesuatu (seperti fakta bahwa partisi swap sangat berguna dalam beberapa cara bahkan jika saya memiliki cukup RAM)? Haruskah saya mematikannya?

Poma
sumber
6
Jadi, semua jawaban bermuara pada pernyataan bahwa 1. lebih banyak memori virtual lebih baik tanpa syarat daripada lebih sedikit, dan 2. harus ada beberapa swap diaktifkan karena ada baiknya tidak ada yang beralasan.
NekojiruSou
2
Adalah keliru untuk berpikir bahwa swap secara eksklusif dimaksudkan untuk memori 'cadangan'. Swap dimaksudkan sebagai tempat untuk meletakkan memori yang tidak digunakan (sehingga Anda dapat menggunakan memori aktual Anda lebih efisien). Anda harus selalu memiliki swap. Jika Anda kehabisan memori, maka Anda kehabisan memori - titik. Ini adalah masalah manajemen kapasitas - bukan kecenderungan untuk bertukar. Saya memiliki serverfault.com/a/332205/75118 respons yang agak panjang yang mencoba menjelaskan maksud kehabisan memori virtual dengan lebih baik.
Matthew Ife

Jawaban:

27

Saya akan mengatakan itu tergantung pada kasus penggunaan Anda dan sisa jawaban telah membahas ini dengan cukup baik. Bagaimanapun juga, 4G swap adalah cara yang murah untuk membeli beberapa keamanan. Dan saya merasa murahnya inilah yang membuat orang tidak mau mematikannya.

Tetapi izinkan saya menjawab dengan pertanyaan retoris. Jika uang bukan masalah, dan Anda memiliki pilihan antara dua sistem - satu dengan 12G RAM dan 4G swap, dan yang lain dengan 16G RAM dan tanpa swap - mana yang akan Anda pilih? Sayangnya kebanyakan orang masih akan menjawab bahwa mereka akan memilih 16G RAM dan masih menambahkan 4G swap, yang tidak ada maksud saya.

Dan pada catatan lain, saya pribadi menemukan sistem swappy lebih buruk daripada sistem crash. Sistem yang macet akan memicu server cadangan siaga untuk mengambil alih lebih cepat. Dan dalam pengaturan aktif-aktif (atau pengaturan beban seimbang), sistem yang macet akan dikeluarkan lebih cepat. Kemenangan untuk sistem tanpa swap lagi.

chutz
sumber
14

Tidak disarankan untuk mematikan swap meskipun Anda memiliki cukup memori. Jika server Anda membutuhkan lebih banyak memori dan tidak mendapatkannya, itu akan macet. Namun, ini dapat dicegah (sampai batas tertentu) ketika Anda memiliki area swap.

Ya, kinerja server Anda akan menurun ketika menggunakan swap, tetapi setidaknya itu akan operasional dan dapat diakses. Kemudian, Anda dapat merencanakan untuk menambah lebih banyak memori bila diperlukan jika server Anda mulai menggunakan swap.

Saya menemukan halaman ini berbicara tentang swap. Lihatlah bagian ke-3.

Alih-alih mematikan swap, Anda dapat mengontrol swapiness .

Khaled
sumber
1
Dalam situasi yang saya jelaskan itu akan mengkonsumsi kedua swap dan RAM dan juga akan crash. Ini berjalan selama beberapa bulan dan tidak pernah menggunakan lebih dari 30% memori. Jadi sangat tidak mungkin bahwa ia akan melompat ke 100% begitu cepat selama operasi normal. Jadi, jika beberapa proses menjadi gila dan mengkonsumsi 8GB berarti itu akan mengkonsumsi sebanyak memori yang bisa didapat oleh OS, itu berarti semuanya.
Poma
@ Poma, ada manfaat lain dari swap juga. Anda juga dapat membiarkan sistem hidup lebih lama ketika Anda memiliki swap. Ini karena swap bisa lebih besar dari memori mengingat ketersediaan drive HD yang murah.
Khaled
6

Tidak, itu bukan ide yang bagus. 'beberapa proses menjadi gila' berarti Anda seharusnya sudah menelepon secara proaktif

ulimit -d

pada atau sebelum waktu pembuatan proses untuk menetapkan batas memori per segmen data proses - Dan mungkin batas jumlah utas

ulimit -T

per proses. ulimit adalah temanmu Silakan pertimbangkan membaca salah satu panduan penyetelan memori sebelum Anda mematikan swap. Anda juga dapat mengubah parm kernel ke beberapa hal untuk mencoba menangani serangan DOS atau program yang buruk.

Lihatlah seperti ini: Total memori pada sistem Anda adalah RAM + swap. Jika Anda memiliki swap 12GB, Anda hanya secara efektif memotong kapasitas sistem VM menjadi dua, dengan menonaktifkan swap. Ide buruk. Ini bukan perdebatan, sungguh, ini hanya membaca apa yang orang lain ketahui dari pengalaman buruk sebelumnya selama bertahun-tahun. Mungkin teman Anda perlu membaca juga.

jim mcnamara
sumber
5

Seperti yang orang lain katakan, Anda dapat secara efektif menghentikan server Anda menggunakan swap kecuali jika benar-benar diperlukan dengan mengutak-atik parameter "swappiness". Ini mengontrol seberapa agresif kernel akan menukar halaman memori.

Anda dapat melihat apa yang sedang diatur dengan:

cat /proc/sys/vm/swappiness

dan Anda dapat mengeditnya "live" dengan (sebagai root):

# echo "10" > /proc/sys/vm/swappiness

dan untuk membuatnya tetap ada, tambahkan berikut ini ke /etc/sysctl.conf:

vm.swappiness=10
Orlando Richards
sumber
2

Hal baik lain yang dapat Anda lakukan adalah menukar ke RAM menggunakan zRAM. Saya pikir ini ide yang bagus! Untuk kinerja, ini seperti tidak memiliki swap sama sekali, tetapi juga mencegah crash ketika sistem sangat dimuat!

Lihat ini:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

Pengalaman saya: Di mesin ini di mana saya menulis sekarang, saya menonaktifkan swap, karena saya memiliki RAM 4Gb (tahun 2009 itu banyak!). Saya hanya mengalami beberapa masalah, salah satunya membuka seperti 127 foto secara bersamaan!

TAPI .. ini adalah workstation, dan saya bisa melakukan reboot jika hang. Di server saya pikir lebih baik memiliki swap, dan swap-in-RAM terdengar bagus untuk saya.

CyberPlant
sumber
1

Seperti yang telah dibuat sangat jelas, ini bukan ide yang baik. Jika tidak ada yang lain, swap memberi Anda ruang bernapas ketika hal-hal tidak normal. mis. Pada satu sistem saya melihat, yang biasanya hanya memiliki beberapa pengunjung per hari, ada lonjakan lalu lintas besar-besaran yang disebabkan oleh halaman yang disebutkan dalam majalah. Ini mengakibatkan server web menggunakan ruang swap untuk pertama kalinya sejak ditugaskan. Tanpa ruang swap itu, segalanya tidak akan berjalan dengan baik.

John Gardeniers
sumber
0

Bukan ide yang bagus. Anda dapat menentukan 2 file swap dengan prioritas berbeda. Satu lebih kecil yang digunakan dan satu lebih besar yang akan digunakan jika mengisi pertama.

Juga vm.swappiness dapat membantu Anda mengontrol seberapa agresif swapping disk terjadi.

Drago
sumber
0

Jika Anda memasukkan 0 ke vm. Kebahagiaan itu tidak berarti bahwa sistem tidak akan bertukar. Ini adalah parameter untuk menentukan seberapa agresif kecenderungan kerne akan bertukar tetapi tidak mematikan swap.

Sekali lagi, bertukar tidak buruk tetapi meronta-ronta adalah. Lihatlah data sysstat dan itu akan memberikan pointer yang cukup bagus.

Soham Chakraborty
sumber