Docker default untuk berjalan tanpa kendala sumber daya. Proses yang berjalan di container bebas menggunakan memori dalam jumlah tak terbatas, berpotensi memengaruhi container tetangga dan beban kerja lain di host Anda.
Ini berbahaya di lingkungan produksi. Setiap kontainer harus dikonfigurasi dengan batas memori yang sesuai untuk mencegah konsumsi sumber daya yang tidak terkendali. Ini membantu mengurangi pertengkaran yang akan memaksimalkan stabilitas sistem secara keseluruhan.
Cara Kerja Limit Memori Docker
Docker memungkinkan Anda menetapkan batas memori hard dan soft pada container individual. Ini memiliki efek yang berbeda pada jumlah memori yang tersedia dan perilaku ketika batas tercapai.
Batas memori keras menetapkan batas absolut pada memori yang diberikan ke penampung. Melebihi batas ini biasanya akan menyebabkan kernel kehabisan memori untuk menghentikan proses container. Batas memori lunak menunjukkan jumlah memori yang diharapkan digunakan oleh container. Wadah diizinkan untuk menggunakan lebih banyak memori ketika kapasitas tersedia. Itu bisa dihentikan jika melebihi batas lunak selama kondisi memori rendah.
Docker juga menyediakan kontrol untuk mengatur batasan memori swap dan mengubah apa yang terjadi ketika batas memori tercapai. Anda akan melihat cara menggunakannya di bagian berikut.
Menyetel Batas Memori Keras dan Lunak
Batas memori keras diatur oleh flag -m atau --memory perintah docker run. Dibutuhkan nilai seperti 512m (untuk megabyte) atau 2g (untuk gigabyte):
$ docker run --memory=512m my-app:latest
Containers memiliki persyaratan memori minimum 6MB. Mencoba menggunakan nilai --memory kurang dari 6m akan menyebabkan kesalahan. Batas memori
Soft disetel dengan tanda --memory-reservation. Nilai ini harus lebih rendah dari --memory. Batas hanya akan diterapkan ketika terjadi pertikaian sumber daya penampung atau host kehabisan memori fisik.
$ docker run --memory=512m --memory-reservation=256m my-app:latest
Contoh ini memulai wadah yang memiliki 256MB cadangan Penyimpanan. Proses dapat dihentikan jika menggunakan 300MB dan kapasitasnya hampir habis. Itu akan selalu berhenti jika penggunaan melebihi 512MB.
Manajemen Swap
Containers dapat dialokasikan memori swap untuk mengakomodasi penggunaan tinggi tanpa memengaruhi konsumsi memori fisik. Swap memungkinkan isi memori untuk ditulis ke disk setelah RAM yang tersedia telah habis.
Bendera --memory-swap mengontrol jumlah ruang swap yang tersedia. Ini hanya bekerja dalam hubungannya dengan --memory. Saat Anda menyetel --memory dan --memory-swap ke nilai yang berbeda, nilai swap mengontrol jumlah total memori yang tersedia untuk wadah, termasuk ruang swap. Nilai --memory menentukan porsi dari jumlah memori fisik.
$ docker run --memory=512m --memory-swap=762m myapp:latest
Kontainer ini memiliki akses ke memori 762MB di mana 512MB adalah RAM fisik . 250MB tersisa adalah ruang swap yang disimpan di disk.
Setting --memory without --memory-swap memberi wadah akses ke jumlah ruang swap yang sama dengan memori fisik:
$ docker run --memory=512m myapp:latest
Kontainer ini memiliki total 1024MB memori, terdiri dari 512MB RAM dan 512MB swap.
Swap dapat dinonaktifkan untuk wadah dengan menyetel flag --memory-swap ke nilai yang sama dengan --memory. Karena --memory-swap menetapkan jumlah total memori, dan --memory mengalokasikan proporsi memori fisik, Anda menginstruksikan Docker bahwa 100% dari memori yang tersedia haruslah RAM.
Dalam semua kasus, swap hanya berfungsi ketika diaktifkan pada Anda tuan rumah. Pelaporan swap di dalam container tidak dapat diandalkan dan tidak boleh digunakan. Perintah seperti free yang dijalankan dalam container akan menampilkan jumlah total ruang swap pada host Docker Anda, bukan swap yang dapat diakses oleh container.
Menonaktifkan Proses Yang Kehabisan Memori
Kesalahan kehabisan memori dalam container biasanya menyebabkan kernel untuk mematikan proses. Ini mengakibatkan penampung berhenti dengan kode keluar 137.
Termasuk flag opsional --oom-kill-disable dengan perintah docker run Anda menonaktifkan perilaku ini. Alih-alih menghentikan proses, kernel hanya akan memblokir alokasi memori baru. Proses akan tampak macet hingga Anda mengurangi penggunaan memorinya, membatalkan alokasi memori baru, atau memulai ulang penampung secara manual.
Bendera ini tidak boleh digunakan kecuali Anda telah menerapkan sendiri mekanisme untuk menyelesaikan kondisi kehabisan memori. Biasanya lebih baik membiarkan kernel mematikan proses, menyebabkan container restart yang mengembalikan konsumsi memori normal. Kontainer
Kesimpulan
Docker datang tanpa kendala sumber daya yang diterapkan sebelumnya. Hal ini membuat proses container bebas menggunakan memori tak terbatas, mengancam stabilitas host Anda.
Dalam artikel ini, Anda telah mempelajari cara menyetel batas memori container keras dan lunak untuk mengurangi kemungkinan Anda mengalami situasi kehabisan memori. Menetapkan batas ini di semua wadah Anda akan mengurangi pertikaian sumber daya dan membantu Anda tetap berada dalam kapasitas memori fisik host Anda. Anda harus mempertimbangkan untuk menggunakan batas CPU di samping batas memori Anda – ini akan mencegah kontainer individual dengan permintaan CPU yang tinggi berdampak buruk terhadap tetangganya.
Itulah berita seputar
Cara Mengatur Batas Memori untuk Kontainer Docker, semoga bermanfaat.
Disadur dari HowToGeek.com.