Salah satu cara untuk menghindari kesalahan kehabisan memori dalam aplikasi adalah dengan menambahkan sejumlah ruang swap ke server Anda. Dalam panduan ini, kita akan membahas cara menambah suatu berkas swap ke server Ubuntu 20.04.
Peringatan: Meskipun biasanya swap disarankan untuk sistem yang menggunakan hard drive berputar tradisional, harap diperhatikan bahwa melakukan swap pada SSD dapat menyebabkan masalah terkait degradasi perangkat keras seiring waktu. Karena itu, kami tidak menyarankan untuk mengaktifkan swap pada DigitalOcean atau penyedia lainnya yang menggunakan penyimpanan SSD.
Swap adalah bagian dari penyimpanan hard drive yang telah disisihkan pada sistem operasi untuk secara sementara menyimpan data yang tidak dapat lagi disimpan di RAM. Ini memungkinkan Anda untuk menambah jumlah informasi yang dapat disimpan oleh server Anda di dalam memori yang sedang bekerja, dengan beberapa peringatan. Ruang swap pada hard drive akan digunakan terutama saat tidak ada lagi ruang yang cukup di RAM untuk menyimpan data aplikasi yang sedang digunakan.
Informasi yang ditulis ke diska akan lebih lambat secara signifikan dibandingkan informasi yang disimpan dalam RAM, tetapi sistem operasi akan lebih memilih untuk tetap menjalankan data aplikasi dalam memori dan menggunakan swap untuk data yang lebih tua. Secara garis besar, memiliki ruang swap sebagai pilihan alternatif saat RAM sistem Anda habis dapat menjadi jaring pengaman yang baik terhadap eksepsi kehabisan memori pada sistem dengan penyimpanan non-SSD.
Sebelum memulai, kita dapat memeriksa apakah sistem sudah memiliki sebagian ruang swap yang tersedia. Dimungkinkan untuk memiliki beberapa berkas swap atau partisi swap, tetapi pada umumnya satu sudah cukup.
Kita dapat melihat apakah sistem memiliki swap yang terkonfigurasi dengan mengetik:
- sudo swapon --show
Jika Anda tidak mendapat keluaran apa pun, ini berarti sistem Anda tidak memiliki ruang swap yang tersedia saat ini.
Anda dapat memverifikasi bahwa tidak ada swap yang aktif dengan menggunakan utilitas free
:
- free -h
Output total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Seperti yang Anda lihat di baris Swap pada keluaran, tidak ada swap yang aktif pada sistem.
Sebelum menciptakan berkas swap, kita akan memeriksa penggunaan diska saat ini untuk memastikan kita memiliki cukup ruang. Lakukan ini dengan mengetik:
- df -h
OutputFilesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
Perangkat dengan /
di dalam kolom Mounted on
adalah diska kita dalam kasus ini. Kita memiliki banyak ruang yang tersedia dalam contoh ini (hanya digunakan 1,4 G). Penggunaan Anda mungkin akan berbeda.
Meskipun ada banyak pendapat tentang ukuran ruang swap yang sesuai, hal itu benar-benar bergantung pada preferensi pribadi dan persyaratan aplikasi Anda. Secara umum, jumlah yang sama atau dua kali dari jumlah RAM pada sistem Anda adalah titik awal yang baik. Patokan yang baik lainnya adalah swap apa pun di atas 4 G mungkin tidak diperlukan jika Anda hanya menggunakannya sebagai pilihan alternatif RAM.
Kini setelah kita mengetahui ruang hard drive yang tersedia, kita dapat menciptakan berkas swap di sistem kita. Kita akan mengalokasikan berkas dengan ukuran yang diinginkan yang bernama swapfile
di direktori root (/
) kita.
Cara terbaik untuk menciptakan berkas swap adalah dengan program fallocate
. Perintah ini seketika menciptakan berkas dengan ukuran yang ditentukan.
Karena server dalam contoh kita memiliki 1 G RAM, kita akan menciptakan berkas 1 G dalam panduan ini. Sesuaikan ini untuk memenuhi kebutuhan server Anda:
- sudo fallocate -l 1G /swapfile
Kita dapat memverifikasi bahwa jumlah ruang yang benar telah disiapkan dengan mengetik:
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile
Berkas telah dibuat dengan menyisihkan jumlah ruang yang benar.
Karena sudah memiliki berkas dengan ukuran yang benar, kita perlu mengubahnya menjadi ruang swap yang sesungguhnya.
Pertama-tama, kita perlu untuk mengunci izin berkas sehingga hanya pengguna dengan privilese root yang dapat membaca konten. Ini mencegah pengguna normal untuk dapat mengakses berkas, yang akan memiliki implikasi keamanan yang signifikan.
Buat berkas hanya dapat diakses oleh root dengan mengetik:
- sudo chmod 600 /swapfile
Lakukan verifikasi perubahan izin dengan mengetik:
- ls -lh /swapfile
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Seperti yang terlihat, hanya pengguna root yang memiliki bendera baca dan tulis yang diaktifkan.
Sekarang kita dapat menandai berkas sebagai ruang swap dengan mengetik:
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
Setelah menandai berkas, kita dapat mengaktifkan berkas swap, yang mengizinkan sistem kita untuk mulai menggunakannya:
- sudo swapon /swapfile
Lakukan verifikasi bahwa swap tersedia dengan mengetik:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Kita dapat memeriksa keluaran utilitas free
lagi untuk menguatkan temuan kita:
- free -h
Output total used free shared buff/cache available
Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 1.0Gi 0B 1.0Gi
Swap telah berhasil disiapkan dan sistem operasi kita akan mulai menggunakannya ketika diperlukan.
Perubahan terbaru kita telah mengaktifkan berkas swap untuk sesi ini. Namun, jika kita melakukan boot ulang, server tidak akan mempertahankan pengaturan swap secara otomatis. Kita dapat mengubah ini dengan menambahkan berkas swap ke berkas /etc/fstab
.
Cadangkan berkas /etc/fstab
seandainya ada kesalahan:
- sudo cp /etc/fstab /etc/fstab.bak
Tambahkan informasi berkas swap di akhir berkas /etc/fstab
dengan mengetik:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Selanjutnya, kita akan meninjau beberapa pengaturan yang dapat kita perbarui untuk menyetel ruang swap.
Ada beberapa opsi yang dapat Anda atur agar berdampak pada kinerja sistem Anda saat berurusan dengan swap.
Parameter swappiness
mengonfigurasi seberapa sering sistem Anda melakukan swap data dari RAM ke ruang swap. Ini adalah nilai antara 0 dan 100 yang mewakili persentase.
Dengan nilai yang dekat dengan nol, kernel tidak akan melakukan swap data ke diska kecuali benar-benar diperlukan. Ingat, interaksi dengan berkas swap adalah hal “mahal” yang dalam hal ini berarti memakan waktu lebih lama daripada interaksi dengan RAM dan dapat menyebabkan pengurangan kinerja yang signifikan. Memberi tahu sistem untuk tidak terlalu banyak mengandalkan swap secara umum akan membuat sistem Anda lebih cepat.
Nilai yang lebih dekat dengan 100 akan mencoba menaruh lebih banyak data ke dalam swap sebagai upaya untuk menjaga lebih banyak ruang RAM yang lowong. Tergantung profil memori aplikasi atau kegunaan server, ini mungkin pilihan yang lebih baik dalam beberapa kasus.
Kita dapat melihat nilai swappiness saat ini dengan mengetik:
- cat /proc/sys/vm/swappiness
Output60
Untuk Desktop, pengaturan swappiness 60 bukanlah nilai yang buruk. Untuk server, Anda mungkin ingin memindahkannya lebih dekat dengan 0.
Kita dapat mengatur swappiness ke nilai yang berbeda dengan menggunakan perintah sysctl
.
Misalnya, untuk mengatur swappiness menjadi 10, kita dapat mengetik:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Pengaturan ini akan terus ada hingga boot ulang selanjutnya. Kita dapat mengatur nilai ini secara otomatis saat memulai ulang dengan menambahkan baris ke berkas /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
Di bagian bawah, Anda dapat menambahkan:
vm.swappiness=10
Simpan dan tutup berkas saat Anda sudah selesai.
Nilai terkait lainnya yang mungkin Anda ingin modifikasi adalah vfs_cache_pressure
. Pengaturan ini mengonfigurasi seberapa banyak sistem akan memilih untuk melakukan cache pada inode dan informasi dentry dibandingkan data lainnya.
Pada dasarnya, ini adalah data akses tentang sistem berkas. Secara umum, ini sangat sulit untuk dicari dan sangat sering diminta, jadi sebaiknya sistem Anda melakukan cache. Anda dapat melihat nilai saat ini dengan melakukan kueri sistem berkas proc
lagi:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
Dalam konfigurasi saat ini, sistem kita menghapus informasi inode dari cache dengan terlalu cepat. Kita dapat mengatur ini ke pengaturan yang lebih konservatif seperti 50 dengan mengetik:
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Sekali lagi, ini hanya valid untuk sesi kita saat ini. Kita dapat mengubah hal itu dengan menambahkannya ke berkas konfigurasi seperti yang kita lakukan dengan pengaturan swappiness:
- sudo nano /etc/sysctl.conf
Di bagian bawah, tambahkan baris yang menentukan nilai baru Anda:
vm.vfs_cache_pressure=50
Simpan dan tutup berkas saat Anda sudah selesai.
Mengikuti langkah-langkah dalam panduan ini akan memberi Anda sebagian ruang bernapas dalam kasus terkait eksepsi kehabisan memori. Ruang swap dapat menjadi sangat berguna untuk menghindari sebagian masalah umum ini.
Jika Anda menjumpai pesan kesalahan OOM (kehabisan memori), atau jika Anda menemukan bahwa sistem tidak dapat menggunakan aplikasi yang Anda perlukan, solusi terbaiknya adalah dengan mengoptimalkan konfigurasi aplikasi atau meningkatkan server.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!