Saat instans Alibaba Cloud ECS kehabisan memori fisik, mengonfigurasi ruang swap merupakan solusi darurat yang hemat biaya. Ruang swap menggunakan disk space sebagai memori virtual untuk mencegah error out-of-memory (OOM) dan menjaga sistem tetap berjalan ketika memori fisik telah habis.
-
Jika instans ECS kekurangan memori, kami menyarankan terlebih dahulu menambah memori fisik dengan mengubah tipe instans.
-
Kami tidak menyarankan menggunakan partisi swap pada basic disk karena performa I/O-nya yang rendah dapat menyebabkan bottleneck sistem. Untuk jenis cloud disk lainnya, Anda dapat menggunakan partisi swap sesuai kebutuhan. Namun, Anda harus mengonfigurasikannya dengan benar untuk menghindari swapping yang terlalu sering dan menjaga stabilitas sistem.
Metode 1: Gunakan plugin Cloud Assistant (direkomendasikan)
Untuk mengonfigurasi partisi swap secara otomatis, Anda harus menginstal Cloud Assistant Agent. Jika instans Anda tidak mendukung Cloud Assistant atau Anda tidak dapat menginstal agen tersebut, gunakan Metode 2 untuk mengonfigurasi swap secara manual.
Aktifkan partisi swap
Login ke instans ECS.
Buka ECS console - Instances. Di pojok kiri atas, pilih wilayah dan resource group untuk instans target.
Buka halaman detail instans target. Klik Connect dan pilih Workbench. Ikuti prompt di layar untuk mengakses terminal.
-
Jalankan perintah berikut untuk mengaktifkan partisi swap.
acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --enableOutput berikut menunjukkan bahwa partisi swap berhasil diaktifkan.
[INFO] The system support auto config swap partition. [INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance [INFO] Turn On Swap...... [INFO] RAM size: 8 G [INFO] Swap size: 8 G [INFO] Check disk available size...... [INFO] Disk available size: 33 G [INFO] Disk available size enough [INFO] Recover swap configuration from /etc/fstab [INFO] Config vm.swappiness=20 to /etc/sysctl.conf [SUCCESS] Swap has been turned on.CatatanPlugin ini secara otomatis menetapkan ukuran partisi swap berdasarkan memori sistem sesuai aturan berikut:
-
Jika RAM ≤ 2 GB, maka Ukuran Swap = RAM × 2.
-
Jika 2 GB < RAM ≤ 8 GB, maka Ukuran Swap = RAM.
-
Jika RAM > 8 GB, partisi swap tidak direkomendasikan.
-
Partisi swap tidak direkomendasikan jika akan menyisakan kurang dari 5 GB disk space yang tersedia.
Nilai default parameter
vm.swappinessadalah 20. Untuk menyesuaikan ukuran partisi swap, lihat Metode 2: Konfigurasi manual partisi swap. -
Periksa status partisi swap
Jalankan perintah berikut untuk memeriksa status partisi swap.
acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --status
Output berikut menunjukkan bahwa partisi swap telah diaktifkan.
[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] ========== Swap status ==========
NAME TYPE SIZE USED PRIO
/swapfile file 8G 0B -2
[INFO] Swap is enabled
Nonaktifkan partisi swap
Jalankan perintah berikut untuk menonaktifkan partisi swap.
acs-plugin-manager --exec --plugin ACS-ECS-SwapConfig --params --disable
Output berikut menunjukkan bahwa partisi swap berhasil dinonaktifkan.
[INFO] The system support auto config swap partition.
[INFO] Alibaba Cloud Swap Configuration Document:https://www.alibabacloud.com/help/en/ecs/support/how-do-i-configure-the-swap-partition-of-a-linux-instance
[INFO] Turn Off Swap......
[INFO] Cancel swap configuration from /etc/fstab
[INFO] Config vm.swappiness=0 to /etc/sysctl.conf
[INFO] Deleted swapfile: /swapfile
[SUCCESS] Swap has been turned off.
Metode 2: Konfigurasi manual
Aktifkan partisi swap
Langkah 1: Periksa status swap saat ini
Sebelum memulai, pastikan sistem Anda tidak memiliki konfigurasi swap yang sudah ada untuk menghindari konflik.
Login ke instans ECS.
Buka ECS console - Instances. Di pojok kiri atas, pilih wilayah dan resource group untuk instans target.
Buka halaman detail instans target. Klik Connect dan pilih Workbench. Ikuti prompt di layar untuk mengakses terminal.
-
Periksa konfigurasi partisi swap.
swapon --show-
Jika perintah tidak menghasilkan output, artinya belum ada swap yang dikonfigurasi dan Anda dapat melanjutkan ke langkah berikutnya.
-
Jika output seperti berikut ditampilkan, artinya sudah ada ruang swap aktif. Anda dapat menonaktifkan dan membersihkan file swap atau membuat file swap baru di disk yang berbeda.

-
Langkah 2: Buat dan siapkan file swap
-
Buat file swap.
Contoh ini menunjukkan cara membuat
/swapfileberukuran 1 GiB. Kami menyarankan menggunakan perintahfallocate. Perintah ini dapat langsung mengalokasikan ruang file dan jauh lebih efisien dibandingkandd.# Create a 1 GiB swap file sudo fallocate -l 1G /swapfileJika sistem file (seperti versi awal XFS) tidak mendukung
fallocate, sistem akan mengembalikan errorfallocate failed: Operation not supported. Dalam kasus ini, gunakan perintahdduntuk membuat file tersebut, meskipun prosesnya lebih lama.sudo dd if=/dev/zero of=/swapfile bs=1M count=1024-
Nilai
ofyaitu/swapfileadalah variabel yang dapat disesuaikan dan merepresentasikan identifier untuk partisi swap, serta tidak boleh sama dengan identifier partisi yang sudah ada. -
Nilai
bsdancountmenentukan ukuran file swap dan dapat disesuaikan. Misalnya,bs=1M count=1024mengatur ukuran file swap menjadi 1 GB.
-
-
Tetapkan izin yang aman.
Untuk mencegah pengguna non-root membaca file swap yang mungkin berisi data sensitif seperti password dan kunci, atur izinnya menjadi
600.sudo chmod 600 /swapfile -
Tandai file tersebut sebagai ruang swap.
sudo mkswap /swapfileTanggapan sukses akan tampak seperti berikut:
Setting up swapspace version 1, size = 1 GiB (1073737728 bytes) no label, UUID=a1a7e24c-38f6-41a4-9e18-be60b631133aCatatan: Ukuran file swap harus lebih besar dari 40 KB. Jika tidak, perintah
mkswapakan melaporkan error.
Langkah 3: Aktifkan dan verifikasi file swap
Aktifkan file swap yang baru dibuat dan pastikan sistem mengenalinya.
-
Aktifkan file swap.
sudo swapon /swapfile -
Verifikasi bahwa swap telah diaktifkan.
swapon --showSetelah aktivasi berhasil, output-nya sebagai berikut:
NAME TYPE SIZE USED PRIO /swapfile file 1G 0B -2Atau, jalankan
free -h. BarisSwapseharusnya menampilkan ukuran totalnya.
Langkah 4: Pastikan persistensi
Tulis konfigurasi Swap ke file /etc/fstab agar Swap tetap berlaku setelah instans restart.
-
(Direkomendasikan) Backup file
fstabuntuk mencegah kesalahan operasional.sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d) -
Tambahkan konfigurasi Swap ke file
fstab.Perintah berikut memeriksa entri swap yang sudah ada sebelum menambahkan entri baru untuk mencegah duplikasi.
SWAP_FILE_PATH="/swapfile" if ! grep -q "swap" /etc/fstab; then echo "${SWAP_FILE_PATH} none swap sw 0 0" | sudo tee -a /etc/fstab else echo "Swap entry already exists in /etc/fstab. No changes made." fi -
Verifikasi konfigurasi persisten.
Anda dapat memverifikasi bahwa konfigurasi
/etc/fstabbenar tanpa harus me-restart instans.# 1. Disable all swap. sudo swapoff -a # 2. Remount all swap partitions based on the /etc/fstab file. sudo swapon -a # 3. Check if swap has been remounted as expected. swapon --showJika perintah menghasilkan informasi swap dengan benar, konfigurasi persisten telah berhasil.
Sesuaikan swappiness
swappiness adalah parameter kernel Linux yang mengontrol seberapa agresif sistem menggunakan Swap. Nilainya berkisar antara 0 hingga 100.
-
Nilai lebih tinggi: Kernel lebih agresif menggunakan swap, memindahkan halaman memori yang tidak aktif ke disk lebih cepat.
-
Nilai lebih rendah: Kernel menghindari penggunaan swap, lebih memilih menyimpan halaman di memori fisik, dan hanya menggunakan swap ketika memori fisik sangat rendah.
Penyesuaian parameter swap harus dilakukan dengan hati-hati. Perubahan yang tidak tepat dapat menurunkan performa sistem atau menyebabkan perilaku memori virtual yang tidak terduga. Lakukan perubahan hanya jika workload spesifik Anda memerlukannya dan Anda sepenuhnya memahami fungsi parameter tersebut. Jika ragu, pertahankan konfigurasi default.
Rekomendasi berdasarkan skenario:
|
Skenario Penerapan |
Nilai |
Alasan |
|
Database (MySQL, PostgreSQL) |
1–10 |
Untuk memastikan performa kueri, hindari swapping kolam buffer inti mereka. |
|
Database in-memory (Redis, Memcached) |
1 |
Database in-memory sangat sensitif terhadap latensi. Aktivitas swap apa pun dapat sangat menurunkan performa. Nilai 1 berarti swap hanya digunakan saat benar-benar diperlukan. |
|
Server aplikasi web (Nginx, Apache) |
10–60 |
Menyeimbangkan kecepatan respons dan pemanfaatan memori dengan memungkinkan halaman proses non-inti yang tidak aktif di-swap keluar. |
|
Workload umum/batch/default |
60 (default sistem) |
Cocok untuk sebagian besar skenario tujuan umum. Memungkinkan sistem melakukan swap proses yang tidak aktif untuk membebaskan memori fisik bagi tugas aktif. |
Prosedur:
-
Edit file
/etc/sysctl.conf. Misalnya, untuk menggunakan partisi swap hanya ketika memori fisik kurang dari 10%, Anda perlu menyesuaikan nilai parameter berikut.vm.swappiness=10 -
Simpan file dan keluar. Lalu, jalankan perintah berikut untuk menerapkan konfigurasi.
sudo sysctl -p -
Verifikasi bahwa konfigurasi parameter
swappinesstelah diterapkan.cat /proc/sys/vm/swappinessOutput berikut menunjukkan bahwa konfigurasi parameter
swappinesstelah diterapkan.
Pantau penggunaan swap
|
Tujuan pemantauan |
Perintah yang direkomendasikan |
Deskripsi |
|
Lihat penggunaan memori dan swap secara keseluruhan |
|
Perintah paling umum dan langsung. |
|
Pantau aktivitas swap real-time (swap-in/swap-out) |
|
Perhatikan kolom |
|
Cari proses yang menggunakan swap |
|
Perintah ini melakukan iterasi melalui semua proses, mencantumkan nama dan penggunaan swap setiap proses, lalu mengurutkan hasilnya sehingga proses dengan penggunaan swap tertinggi muncul di atas. |
|
Analisis performa historis |
|
|
Nonaktifkan dan bersihkan swap
Saat file swap tidak lagi diperlukan, nonaktifkan dengan aman dan hapus file tersebut untuk membebaskan disk space.
-
Nonaktifkan file swap yang ditentukan.
sudo swapoff /swapfile -
Hapus konfigurasi auto-mount dari
fstab. Gunakan perintahseduntuk menghapus baris yang sesuai secara aman dan menghindari kesalahan akibat pengeditan manual.sudo sed -i '\|/swapfile|d' /etc/fstab -
Hapus file swap untuk membebaskan disk space.
sudo rm /swapfile -
Verifikasi bahwa swap benar-benar telah dinonaktifkan.
Jalankan
swapon --showataufree -huntuk memastikan informasi swap telah hilang.
FAQ
Mengapa swap tidak berfungsi seperti yang diharapkan?
Setelah membuat partisi swap dan menyesuaikan parameter swappiness, Anda mungkin melihat fenomena yang membingungkan: meskipun memori fisik berada di bawah tekanan tinggi, penggunaan partisi swap tetap rendah, sehingga tampak seolah-olah pengaturan swappiness belum diterapkan.
Diagnosis masalah
Akar penyebab masalah ini terletak pada mekanisme systemd dan control group (Cgroup) yang banyak digunakan dalam distribusi Linux modern.
-
Aturan khusus Cgroup: Dalam mode Cgroup v1 default,
systemdmembuat Cgroup terpisah untuk komponen seperti layanan sistem (system.slice) dan sesi pengguna (user.slice). Setiap Cgroup dapat memiliki parameter kontrol resource sendiri, sepertimemory.swappiness. -
Pengaturan lokal mengesampingkan pengaturan global: Saat
systemdmenginisialisasi Cgroup ini, ia menetapkan nilai defaultmemory.swappinessuntuk mereka (biasanya 60). Pengaturan khusus Cgroup ini mengambil prioritas dibandingkan pengaturan globalvm.swappinessyang dikonfigurasi di/etc/sysctl.conf. -
Hasil: Program yang berjalan sebenarnya mengikuti aturan
swappinessmilik Cgroup-nya, bukan aturan global, sehingga konfigurasi global menjadi tidak efektif.
Verifikasi cepat
-
Cari PID proses yang sedang berjalan (misalnya,
pidof nginx). -
Periksa cgroup tempat proses tersebut berada:
cat /proc/[PID]/cgroupAnda akan melihat path seperti
/system.slice/nginx.service. -
Periksa nilai
swappinessaktual Cgroup ini:cat /sys/fs/cgroup/memory/system.slice/nginx.service/memory.swappinessKemungkinan besar output-nya adalah
60meskipun Anda telah mengaturvm.swappinessglobal ke nilai lain. Hal ini menunjukkan bahwa konfigurasi global tidak berlaku.
Solusi
Solusi 1: Beralih ke cgroup v2 (direkomendasikan)
Prinsip: cgroup v2 memperbaiki banyak masalah desain pada v1 dan menggunakan struktur hierarkis terpadu. Dalam mode v2, cgroup anak mewarisi konfigurasi dari node induknya secara default. Anda hanya perlu mengonfigurasi vm.swappiness global, dan pengaturan ini secara otomatis serta seragam diterapkan ke semua proses dalam sistem.
Prosedur:
-
Perbarui parameter boot kernel:
Gunakan toolgrubbyuntuk menambahkan parametersystemd.unified_cgroup_hierarchy=1ke semua kernel guna mengaktifkan cgroup v2.sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"Catatan: Perintah ini bersifat persisten. Ini memodifikasi konfigurasi boot GRUB, sehingga sistem akan diinisialisasi dalam mode cgroup v2 saat startup berikutnya.
-
Restart instans ECS:
Pengaturan ini merupakan parameter tingkat kernel dan memerlukan restart agar berlaku.sudo reboot -
Verifikasi dan konfigurasi:
-
Verifikasi: Setelah restart, jalankan
mount | grep cgroup. Jika Anda melihat titik mount bertipecgroup2, artinya Anda telah berhasil beralih ke cgroup v2. -
Konfigurasi: Tetapkan nilai
vm.swappinessyang diinginkan di/etc/sysctl.conf, lalu jalankansudo sysctl -puntuk menerapkan pengaturan ke seluruh sistem.
-
Solusi 2: Konfigurasi persistensi di cgroup v1 (alternatif)
Jika lingkungan Anda tidak dapat dialihkan karena alasan tertentu (misalnya, menjalankan perangkat lunak container lama yang tidak kompatibel dengan cgroup v2), Anda dapat menggunakan konfigurasi drop-in systemd untuk mengatasi masalah ini.
Prinsip: Metode ini tidak lagi bergantung pada konfigurasi global yang berpotensi bermasalah. Sebaliknya, metode ini secara langsung menginstruksikan systemd untuk menggunakan nilai swappiness yang ditentukan saat membuat slice inti.
Prosedur:
-
Buat konfigurasi override untuk
system.slice(ini memengaruhi semua layanan sistem):Ganti
60dengan nilaiswappinessyang diinginkan.sudo mkdir -p /etc/systemd/system/system.slice.d/ sudo tee /etc/systemd/system/system.slice.d/99-swappiness.conf <<'EOF' [Slice] MemorySwappiness=60 EOF -
Buat konfigurasi override untuk
user.slice(ini memengaruhi semua sesi login pengguna).Ganti
60dengan nilaiswappinessyang diinginkan.sudo mkdir -p /etc/systemd/system/user.slice.d/ sudo tee /etc/systemd/system/user.slice.d/99-swappiness.conf <<'EOF' [Slice] MemorySwappiness=60 EOF -
Terapkan konfigurasi.
sudo systemctl daemon-reload sudo rebootdaemon-reloadhanya memuat ulang konfigurasisystemd. Untuk memastikan semua layanan dan sesi dibuat di bawah konfigurasi Slice baru, Anda harus me-restart server.