Jika Anda ingin memulai argumen dengan pengguna Linux, tanyakan tentang swap Penyimpanan. Beberapa memujinya sebagai bantalan atau sebagai jaring pengaman sementara yang lain meremehkannya sebagai penopang dan perusak kinerja sistem. Lahir pada 1960-an, memori swap telah berkembang selama bertahun-tahun di Linux untuk melayani dua fungsi penting:
- Memori darurat saat sistem menggunakan semua RAM-nya dan masih membutuhkan lebih banyak lagi
- Tempat parkir untuk halaman memori yang jarang digunakan yang menghabiskan RAM sistem yang berharga
Banyak distribusi Linux, termasuk Red Hat, merekomendasikan memori swap untuk semua sistem. Namun, jika Anda melihat sebagian besar instance cloud dari berbagai distribusi, Anda menemukan bahwa memori swap tidak ada.
[ Anda mungkin juga menyukai: Pemecahan masalah Linux 101:Kinerja sistem ]
Ikhtisar pertukaran
Swap ada di sebagian besar sistem sebagai partisi pada disk. Setelah mempartisi, administrator memformat partisi dengan mkswap
, aktifkan dengan swapon
, dan kernel langsung melihat memori swap yang tersedia. Sistem tanpa partisi yang tersedia dapat menggunakan file swap, yang hanya merupakan file pada sistem file yang ada yang diformat dengan mkswap
dan diaktifkan.
Kedua metode bekerja dengan baik, tetapi menempatkan swap pada partisi menghasilkan kinerja yang lebih baik karena Anda melewatkan overhead file swap pada partisi yang ada.
Ketika RAM sistem langka, Linux dapat menyimpan halaman memori di swap untuk menghindari mematikan proses dan merusak sistem. Disk jauh lebih lambat daripada RAM sistem, dan ini mengurangi kinerja sistem hingga RAM sistem kosong. Jika penggunaan memori terus meningkat ke titik di mana RAM sistem dan swap benar-benar habis, pembunuh Kehabisan Memori (OOM) muncul dan mulai menghentikan proses hingga tersedia cukup RAM.
Saran lama tentang ukuran swap adalah dua kali lipat ukuran RAM sistem Anda. Misalnya, alokasikan 2GB swap untuk sistem dengan 1GB RAM sistem. Meskipun rasio ini bekerja dengan baik untuk sistem yang lebih kecil, rasio ini tidak ditingkatkan untuk sistem dengan ratusan gigabyte RAM sistem.
Kasus untuk swap di cloud
Munculnya layanan mikro (layanan kecil yang saling berhubungan yang membentuk aplikasi besar) mendorong perusahaan untuk menyebarkan lebih banyak instans yang lebih kecil. Instans yang lebih kecil hadir dengan RAM sistem yang lebih sedikit, yang meningkatkan risiko pembunuh OOM yang ditakuti muncul untuk menghentikan proses hingga sistem memiliki cukup memori bebas.
Menambahkan swap ke sistem ini membantu dalam dua cara:
- Pertama, proses dapat secara singkat keluar dari RAM sistem ke dalam swap selama periode beban tinggi. Administrator mempelajari tentang peristiwa ini dari sistem pemantauan mereka, dan mereka memiliki waktu untuk menyelidiki alasan ledakan saat itu terjadi pada sistem. Dalam kasus kebocoran memori, pengembang dapat memeriksa proses untuk memahami apa yang salah saat masih hidup. Ini juga bisa menjadi sinyal bahwa administrator membutuhkan jenis instans yang lebih besar untuk aplikasi mereka seiring pertumbuhannya.
- Kedua, kernel Linux mengawasi halaman memori yang jarang digunakan dan mengirimkannya untuk ditukar untuk mempertahankan RAM sistem yang berharga.
sysctl
menyetelvm.swappiness
mengontrol keinginan kernel untuk mendorong halaman memori untuk bertukar. Ini dapat membantu instance cloud dengan menyimpan halaman paling aktif di RAM sistem sambil mendorong halaman yang jarang digunakan untuk menukar memori.
Kasus terhadap swap di cloud
Analogi "hewan peliharaan vs ternak" sering muncul ketika berbicara tentang instance cloud dan administrator membuang swap karena mereka dapat secara otomatis mengganti instance yang berperilaku tidak semestinya dengan yang baru. Seiring waktu, metrik pemantauan mereka menunjukkan peningkatan dalam kasus yang membutuhkan penggantian karena pembunuh OOM membuat aplikasi mereka offline. Solusinya bisa berupa instance yang lebih besar atau penyelidikan lebih lanjut tentang kebocoran memori yang sedang dimuat. Systemd
juga akan memulai ulang proses ini dengan cepat jika memungkinkan.
Memilih lokasi memori swap pada instans cloud membutuhkan lebih banyak pemikiran dan perencanaan. Pada server fisik, swap pada disk Non-Volatile Memory Express (NVMe) yang terpasang secara lokal cukup cepat, tetapi bagaimana dengan instance cloud dengan penyimpanan eksternal terpasang, seperti Elastic Block Storage (EBS) AWS? Performa pada EBS bervariasi tergantung pada jenis EBS yang Anda pilih dan sistem tetangga Anda. Tukar pada sistem penyimpanan jarak jauh dapat menyebabkan kinerja instans yang buruk ketika sistem melebihi RAM-nya. Administrator dapat memilih untuk menghilangkan swap dan mengganti instance ini saat mereka memenuhi RAM mereka alih-alih bergulat dengan permintaan penanganan server yang berkinerja buruk.
Terakhir, banyak instance cloud menjadi bagian dari kluster Kubernetes dan OpenShift, dan mereka memiliki tantangan saat berurusan dengan memori swap. Ada masalah GitHub yang sudah berjalan lama tentang penanganan memori swap dengan tepat karena membuang akuntansi memori untuk container. Ada solusi, tetapi memori swap umumnya dilewati pada sistem ini.
Menerapkan instance cloud dengan swap
Jika Anda memutuskan bahwa penyediaan memori swap menguntungkan aplikasi Anda, cloud-init memberi Anda kemampuan untuk menyediakan memori swap pada boot pertama menggunakan mounts
modul. Cukup tambahkan beberapa baris ke data pengguna cloud-config yang ada:
swap:
filename: /swapfile
size: auto
maxsize: 4294967296
Konfigurasi ini memberi tahu cloud-init untuk membuat file swap di /swapfile
dengan ukuran otomatis yang sama dengan atau kurang dari 4GB. Rumus untuk ukuran swap otomatis ada di kode sumber cloud-init:
formulas = [
# < 1G: swap = double memory
(1 * GB, lambda x: x * 2),
# < 2G: swap = 2G
(2 * GB, lambda x: 2 * GB),
# < 4G: swap = memory
(4 * GB, lambda x: x),
# < 16G: 4G
(16 * GB, lambda x: 4 * GB),
# < 64G: 1/2 M up to max
(64 * GB, lambda x: x / 2),
]
Ukuran swap yang disarankan dari Red Hat sedikit berbeda:
- 2GB atau kurang dari RAM sistem :2x RAM
- Lebih dari 2 GB hingga 8 GB : 1x RAM
- Lebih dari 8GB hingga 64GB : Minimal 4 GB
- Lebih dari 64 GB : minimal 4 GB
Anda dapat secara manual menentukan memori swap (dalam byte) dengan size:
parameter
di cloud-config:
swap:
filename: /swapfile
size: 2147483648 # 2 GiB
Penyediaan swap pada instance cloud yang ada
Untuk contoh yang ada, file swap seringkali merupakan metode termudah untuk mengaktifkan memori swap. Dalam contoh ini, tempatkan file swap 2 GB di /swapfile
:
# BTRFS only #################################################################
# We must disable copy-on-write updates for swap files on btrfs file systems.
# The 'swapon' step fails if you skip these steps.
truncate -s 0 /swapfile
chattr +C /swapfile
# BTRFS only #################################################################
# A 2 GiB swap file.
dd if=/dev/zero of=/swapfile bs=1MiB count=2048
# Set the correct permissions on the swap file.
chmod 0600 /swapfile
# Format the swapfile.
mkswap /swapfile
# Enable the swapfile.
swapon /swapfile
# Add it to /etc/fstab to enable it after reboot.
echo "/swapfile none swap defaults 0 0" >> /etc/fstab
Periksa apakah memori swap Anda sudah siap:
$ cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 2097148 0 -2
[ Kursus online gratis:Tinjauan teknis Red Hat Enterprise Linux. ]
Selesai
Memori swap memberikan dua manfaat berharga:
- Bantal pengaman saat penggunaan RAM sistem meningkat ke tingkat yang berbahaya
- Tempat parkir untuk halaman memori yang jarang digunakan yang menghabiskan ruang berharga di RAM sistem
Bantalan pengaman itu disertai dengan penalti kinerja karena paging memori ke disk sangat lambat dibandingkan dengan memori sistem.
Penerapan cloud jarang melihat memori swap dikerahkan, tetapi swap masih memiliki manfaat di sana. Memilih untuk menerapkan swap memungkinkan adanya bantalan keamanan saat aplikasi berperilaku tidak semestinya, tetapi dapat menyebabkan aplikasi berjalan lambat hingga masalah konsumsi memori teratasi. Melewatkan swap menghilangkan bantalan tetapi memastikan bahwa aplikasi yang berperilaku tidak semestinya segera berhenti. Administrator cloud harus memiliki rencana untuk menangani situasi ini.
Untungnya, cloud-init muncul di sebagian besar instans cloud, dan memungkinkan pembuatan file swap hanya dengan beberapa baris YAML. Memori swap juga mudah dikonfigurasi setelah penerapan menggunakan perintah atau skrip shell sederhana.
Apakah Anda memilih untuk menggunakan memori swap atau tidak, pastikan Anda memiliki rencana saat hal terburuk terjadi. Pantau sistem dengan tepat dan pertahankan tampilan holistik dari aplikasi yang mereka layani.