CentOS Berapa Banyak SWAP untuk 16GB RAM?

11

Berapa banyak SWAP yang akan Anda berikan untuk instalasi CentOS pada dual Quad Core XEON dengan 16GB RAM yang akan menjalankan situs web php dengan backend mysql - beban sedang / berat?


sumber

Jawaban:

20

Tidak lebih dari satu atau dua pertunjukan - Anda ingin sedikit pertukaran tersedia, untuk berjaga-jaga dan karena itu membantu pekerjaan sedikit lebih baik, tetapi jika Anda pernah sampai pada titik di mana Anda banyak bertukar, mesin akan menyala menjadi tidak berguna - dan dalam situasi bencana nyata, Anda sebenarnya lebih baik dengan ruang swap yang lebih kecil, karena dengan begitu Anda akan memicu pembunuh OOM lebih cepat daripada nanti.

genhack
sumber
7
Dan ingat bahwa Anda selalu dapat menambahkan lebih banyak ruang swap nanti jika diperlukan dengan membuat beberapa ruang dan membuat volume baru (jika menggunakan LVM) atau menggunakan file sebagai swap dengan sesuatu sepertidd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett
3
Sebagai catatan tambahan, Anda dapat mengontrol tingkat swapping dengan menyesuaikan nilai / proc / sys / vm / swappiness.
David
2
Saya harus tidak setuju dengan beberapa poin di sini. . . Pertama, disk murah, Anda mungkin juga melemparkan beberapa GB padanya. Kedua, pembunuh OOM dapat menurunkan seluruh kotak Anda jika Anda beruntung. Mengandalkannya dengan cara apa pun atau mempertimbangkannya lebih baik untuk memicu pembunuh OOM adalah Ide yang Sangat Buruk. Berpikir bahwa kotak yang berpotensi tertutup lebih baik daripada potensi perlambatan juga merupakan ide yang buruk. Satu-satunya waktu yang masuk akal adalah jika Anda memiliki pengaturan yang sangat spesifik yang direncanakan di sekitar situasi itu.
Christopher Cashell
catatan tambahan, umumnya lebih baik untuk mengatur swap ke partisi dan bukan file untuk menghindari overhead dan menyederhanakan proses boot. Namun menggunakan file akan berhasil. 4GB adalah semua sistem yang seharusnya dibutuhkan, saya ragu Anda akan mendapatkan banyak pertukaran dengan 16GB RAM
Silverfire
Sebenarnya menurut Andrew Morton, kinerja harus hampir sama antara swapfile dan partisi lkml.org/lkml/2005/6/29/11
Journeyman Geek
8

Saya minta maaf atas jawaban yang sangat panjang. Saya sudah lama ingin meletakkan barang-barang ini di tempat yang bisa diakses!

TLDR; Secara teoritis, jawabannya adalah "mungkin tidak kurang dari jumlah total memori penduduk yang ingin digunakan aplikasi Anda"

Saya akan mencoba menjelaskan jika Anda tetap dengan saya ..

Sedikit tentang memori virtual

Saya merasa ada kesalahpahaman umum hari ini tentang apa nilai swap dan untuk apa tujuannya. Sering dianggap bahwa swap dimaksudkan sebagai 'bank cadangan' untuk memori ketika memori Anda hampir habis. Ya, ini sebagian benar, tetapi kernel tidak ingin menggunakan swap Anda sebagai bank cadangan . Selain itu kernel tidak pernah ingin memanggil disk untuk mendapatkan data yang Anda cari!

Di ruang aplikasi, ada beberapa hal yang akan disimpan dalam memori kernel.

  • Data file yang dipetakan.
  • sistem file tmpfs.
  • Memori aplikasi mentah dialokasikan saat runtime.
  • Kode aplikasi (seperti barang di segmen data format ELF)
  • Data file yang disimpan secara pribadi.

Untuk tujuan manajemen memori, alokasi memori didukung dalam beberapa bentuk oleh perangkat pendukung.

Memori yang didukung file adalah memori yang berasal dari file dan pada O / S tipikal membuat sebagian besar alokasi memori pada sistem. Ini termasuk file seperti pustaka bersama yang telah dimuat, file membaca dari disk dan disimpan dalam cache halaman dan file mmaped dari disk (pada kenyataannya, kernel tidak membuat perbedaan halaman antara file dalam cache halaman dan file mmapped sebagai dasarnya hal yang sama).

Hal yang hebat tentang memori ini dari sudut pandang kernel adalah disposable-nya, yaitu memungkinkan untuk membuang halaman-halaman ini jika Anda membutuhkan memori untuk sesuatu yang lain dan ini persis seperti yang dilakukan cache halaman jika memori tiba-tiba diperlukan.

Memori yang didukung secara anonim adalah masalah yang berbeda. Memori dari wilayah ini anonim karena, yah tidak ada file pada disk yang sebenarnya berisi data ini. Ini biasanya terdiri dari tumpukan aplikasi, heap, apa pun dalam data tmpfs dan mmapped yang bersifat pribadi dan telah dimodifikasi (karena tidak dapat menyinkronkan hal ini kembali ke disk). Karena tidak ada file yang valid pada sistem file untuk menulis kembali halaman ini jika mereka berubah, memori yang didukung secara anonim didukung oleh media swap.

Sekarang, kernel tahu bahwa ketika memori langka, jauh lebih murah untuk membuang file yang didukung memori yang dipetakan secara anonim, itu karena data anonim memiliki peluang yang jauh lebih tinggi untuk menjadi "kotor" daripada file yang didukung data, bahkan secara default kernel menilai memori yang didukung secara anonim sebagai 80 kali lebih berharga daripada file yang didukung memori dan ini sebenarnya yang dilakukan modifier swappiness di linux (lihat posting ini di sini jika Anda ingin tahu apa sebenarnya parameter swappiness diubah).

Skenario kasus terburuk

Skenario kasus terburuk ketika datang ke server keluar dari kendali dan OOMing didasarkan pada kenyataan bahwa ia menghabiskan terlalu banyak waktu menangani permintaan I / O daripada memenuhi permintaan alokasi memori. Ada dua kondisi yang dapat menerapkan kriteria ini.

  • Mengganti memori anonim sepanjang waktu untuk mengambil halaman yang diminta, atau mengalokasikan lebih banyak halaman untuk aplikasi.
  • Menghabiskan terlalu banyak waktu untuk mengambil data dari disk karena tidak ada dalam memori daripada yang Anda berikan untuk menjalankan proses yang menginginkan waktu CPU.

Yang pertama, adalah masalah yang biasa dipikirkan. Artinya, karena begitu banyak memori yang hidup di dalam swap, kita perlu menukar memori anonim dari RAM, memasukkannya kembali ke swap, kemudian mengambil sesuatu dari swap dan memasukkannya ke dalam RAM nyata. Operasi ini sangat mahal, memperlambat mesin ke titik di mana ia bisa menjadi situasi yang tidak dapat dipulihkan (karena lebih banyak barang yang antri untuk permintaan halaman daripada apa yang dapat dilayani dari I / O).

Yang kedua kurang dipertimbangkan tetapi sama pentingnya. Jika Anda mengalokasikan hampir semua memori Anda untuk data aplikasi nyata - Anda tidak akan bertahan lama. Hampir setiap aplikasi bergantung pada membaca file dari sistem file untuk beroperasi, ini bisa jadi karena beberapa instruksi tinggal di perpustakaan bersama atau karena Anda perlu membaca /etc/resolv.conf untuk panggilan perpustakaan, atau tujuan lain. Ini sepenuhnya masuk akal untuk menghentikan sistem operasi - namun memiliki memori yang cukup untuk memenuhi semua aplikasi Anda, tetapi karena antrian Anda begitu banyak permintaan I / O tidak ada yang memiliki kesempatan untuk menyelesaikan dengan benar.

Apa yang ingin dilakukan kernel dengan swap Anda

Kernel ingin menggunakan swap Anda untuk menyingkirkan halaman yang membuang-buang memori sehingga dapat menggunakan memori itu untuk hal lain.

Pada dasarnya, dalam operasi normal, kernel suka secara agresif mengisi cache halaman dengan data yang dibaca dari disk, ini berarti ia tidak akan membaca disk untuk data yang sama. Ini adalah desain yang bagus dan dapat secara besar-besaran mengurangi I / O. Sekarang, mungkin Anda memiliki beberapa aplikasi yang tersimpan dalam memori yang tidur selama 3 hari, bangun, melakukan banyak pekerjaan kemudian tidur 3 hari lagi.

Apa yang ingin dilakukan kernel dengan data ini adalah menukarnya dengan membuat ruang untuk aktivitas sistem file, karena Anda memiliki peluang yang jauh lebih tinggi untuk benar-benar menggunakan halaman-halaman ini lebih sering daripada halaman yang Anda gunakan untuk aplikasi Anda. Bertukar, dalam hal ini mungkin transaksi 16kb ke media swap Anda yang seharusnya tidak Anda rasakan, tetapi sebagai imbalannya Anda membebaskan memori 16kb yang dapat digunakan untuk menyimpan empat file data.

Untuk apa kernel tidak ingin menggunakan swap

Kernel pasti tidak ingin menggunakan swap Anda untuk mengalokasikan lebih banyak memori anonim dengan menukar beberapa memori anonim lainnya, ini adalah situasi yang paling dikhawatirkan oleh orang.

Namun, saya harus menunjukkan bahwa jika Anda telah mengalokasikan begitu banyak memori sehingga kernel tidak punya pilihan selain melakukan ini, ini adalah masalah konfigurasi administrator sistem, bukan kernel itu sendiri - itu hanya berusaha melakukan yang terbaik oleh opsi yang telah Anda berikan!

Jika Anda memiliki jumlah swap yang besar, apakah Anda meningkatkan peluang Anda menggunakannya?

Tidak! Jika Anda memiliki ram 1G dan 4G swap, tidak ada peluang 80% data Anda ditukar! Kernel hanya ingin menggunakan swap ketika halaman dalam memori dapat dilayani dengan lebih baik dengan melakukan hal lain!

Apakah menguntungkan untuk tidak menggunakan swap sama sekali

Saya tidak akan pernah melakukan ini. Swapping memungkinkan O / S untuk menyingkirkan memori yang perlu Anda miliki tetapi tidak pernah digunakan. Jika Anda tidak memiliki swap, hanya menelan memori Anda tidak akan pernah kembali, yang Anda mungkin melihat peningkatan kinerja yang signifikan dengan membiarkan katakanlah, cache halaman untuk memilikinya sebagai gantinya.

Whats swap terbaik untuk dimiliki

Secara teoritis, cari tahu berapa banyak memori penduduk + 20% untuk keselamatan seperti panggilan perpustakaan kembali yang harus mengalokasikan memori dari tumpukan - kemudian tetapkan swap Anda ke jumlah itu. Ini akan (secara teori tetap) mengizinkan sistem operasi untuk menukar semua memori anonim jika harus membuat jalan untuk sesuatu yang lebih berguna.

Jika saya mendapatkan peluang kernel untuk menukar semua itu berbahaya kan?

Ingat, kernel tidak ingin menukar untuk memberi jalan bagi alokasi memori yang lebih anonim di sini, hanya akan pernah menukar halaman yang tidak digunakan untuk mendukung sesuatu yang lain yang akan membuat penggunaan ruang yang lebih baik sebagai gantinya.

Jika Anda mengganti memori keluar hanya untuk mengalokasikan dari lebih banyak memori anonim, Anda melakukan sesuatu yang salah dan memerlukan lebih banyak RAM atau untuk membatalkan tumpukan aplikasi Anda.

Berapa banyak RAM yang Anda butuhkan

Anda perlu mengizinkan RAM yang cukup untuk menjalankan semua aplikasi Anda tentu saja, tetapi Anda mungkin harus mengizinkan tambahan 2G RAM untuk mengisi pagecache - mungkin lebih. Cache halaman membuat komputer Anda jauh lebih cepat dan disk Anda bertahan lebih lama. Jika Anda berpikir untuk menjalankan server web, memiliki lebih banyak untuk pagecache adalah ide yang baik karena banyaknya konten statis yang dapat Anda ambil dan gunakan kembali dari pagecache yang akan dilayani (jika throughput server web Anda 5mb / s, Anda benar-benar tidak ingin mengambil konten 5mb / s yang Anda hasilkan dari disk Anda!).

Apa yang harus dilakukan jika Anda benar-benar tidak percaya linux untuk bertukar dengan benar

Jika Anda benar-benar khawatir, Anda dapat mengalokasikan lebih banyak memori daripada yang Anda miliki:

  • Tetapkan jumlah swap Anda menjadi tidak lebih dari RAM Anda
  • Set / proc / sys / vm / overcommit_memory menjadi 2
  • Set / proc / sys / vm / overcommit_ratio menjadi nilai yang tidak pernah benar-benar melebihi batas RAM fisik. Lihat dokumentasi kernel untuk mencari tahu apa angka itu bagi Anda.

Whats cara terbaik untuk menyempurnakan memori saya untuk aplikasi saya

  • Memahami apa yang sebenarnya dilakukan swappiness.
  • Gunakan CGroups untuk mengalokasikan sumber daya yang benar per aplikasi.
  • Ubah mode overcommit yang disebutkan di atas untuk membuat sistem operasi memberlakukan batasan yang ketat.
  • Gunakan cgroup seperti di atas untuk menetapkan prioritas OOM pada aplikasi yang benar - benar ingin Anda simpan jika Anda kehabisan memori dan aplikasi yang benar - benar ingin Anda buang jika Anda kehabisan memori.

Penjual merekomendasikan konfigurasi yang berbeda ..

Dengarkan saja itu. Beberapa aplikasi ditulis sedemikian rupa sehingga mereka dengan sengaja meminta kernel agar halaman mereka aktif di atas yang lainnya. Ini adalah trik yang tidak jujur ​​untuk jujur ​​tetapi itu merusak kemampuan kernel untuk mengelola memori secara mulus ketika itu terjadi. Jika vendor Anda memberikan Anda spesifik maka mereka kemungkinan masuk dalam kategori ini dan mendengarkan apa yang mereka katakan.

kesimpulan

  • Swap dimaksudkan untuk digunakan sebagai tempat menaruh memori yang terbuang. Bukan sebagai 'memori cadangan'
  • Memiliki jumlah swap yang besar tidak berpengaruh apa pun pada peluang Anda menggunakannya.
  • Kernel benar-benar ingin menghentikan Anda mengakses disk untuk data Anda. Ini berlaku sama seperti - jika tidak lebih sama dengan cache halaman seperti halnya menukar ruang.
  • Kernel akan mencoba yang terbaik untuk menghormati pengaturan yang Anda berikan ke aplikasi yang Anda jalankan. Tetapi jangan heran jika Anda OOM jika Anda memiliki 500 anak apache semua mengambil 32M memori. Itu kesalahan konfigurasi yang Anda pilih, bukan manajemen memori.

Kernel biasanya melakukan pekerjaan yang sangat baik dalam mengelola memori virtual dengan benar. Ini hampir selalu terjadi bahwa aplikasi Anda mengalokasikan lebih banyak memori daripada yang mungkin bisa Anda harapkan untuk bekerja dan itulah yang menyebabkan OOM.

Swap dulu digunakan sebagai 'memori cadangan', tapi itu bukan tujuan utamanya lagi, jadi jangan berpikir untuk menggunakannya seperti itu. Sebagai gantinya, hargai bahwa kernel Anda mungkin paling tahu untuk apa ia menggunakan memori Anda. Berikan ruang untuk membuat keputusan itu dan Anda akan mendapat manfaat dari peningkatan kinerja secara keseluruhan.

Matthew Ife
sumber
2

Dari dokumen "Oracle 10g Server pada Red Hat® Enterprise Linux® 5 Rekomendasi Penyebaran".

Oracle memberikan rekomendasi umum tentang ukuran swap di MetaLink Note 169706.1. Rekomendasi ini dapat mengarah pada penciptaan ruang swap yang sangat besar pada sistem dengan jumlah memori yang besar. Swap yang sangat besar dapat menyebabkan penurunan kinerja sistem dan dapat diselesaikan dengan mengurangi ruang swap. Red Hat tidak merekomendasikan mengalokasikan lebih dari 4GB untuk swap di Red Hat Enterprise Linux 5.

Jadi untuk 16GB Anda seharusnya tidak lebih dari 4GB swap.

PS. Juga perlu dicatat bahwa dipanggil oomhampir selalu lebih baik daripada proses pertukaran yang tidak dapat digunakan menggunakan seluruh bandwidth I / O.

SaveTheRbtz
sumber
-1

Dari apa yang saya ingat dari dokumentasi linux: Jika ram Anda lebih besar dari 2gb maka Anda melakukan swap = (ramSize + 2). Jika kurang dari itu Anda melakukan swap = (ramSize * 2)

Solusi Web MKN
sumber
-2

Saya menemukan dokumen ini untuk Anda, itu akan membantu Anda untuk membuat keputusan itu, ini dia: Apa itu Swap Space? , tetapi tidak satu pun dari jawaban di atas yang benar

alexus
sumber
1
Dokumen yang Anda tautkan tidak setuju dengan dirinya sendiri. Mengikuti aturan "untuk lebih banyak jumlah RAM 2Gb dari RAM di atas 2Gb" akan memberikan swap 1Gb untuk RAM 3Gb (3-2 = 1) bukan 5Gb.
David Spillett