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?
11
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.
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
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.
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.
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:
Whats cara terbaik untuk menyempurnakan memori saya untuk aplikasi saya
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
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.
sumber
Dari dokumen "Oracle 10g Server pada Red Hat® Enterprise Linux® 5 Rekomendasi Penyebaran".
Jadi untuk 16GB Anda seharusnya tidak lebih dari 4GB swap.
PS. Juga perlu dicatat bahwa dipanggil
oom
hampir selalu lebih baik daripada proses pertukaran yang tidak dapat digunakan menggunakan seluruh bandwidth I / O.sumber
Rekomendasi CentOS Swap saat ini menggunakan rumus:
Jadi untuk 16G, jumlah swap harus 18G.
Lihat http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
sumber
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)
sumber
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
sumber