Membatasi penggunaan memori pada sistem Linux modern dilakukan melalui integrasi Systemd dengan Control Groups (cgroups) v1 atau v2. Dengan mendefinisikan parameter direktori service Systemd, administrator dapat mencegah sebuah aplikasi mengalami kebocoran memori (memory leak) yang berujung pada kelumpuhan sistem atau terpicunya mekanisme Out-Of-Memory (OOM) Killer pada proses krusial lainnya.
Pengaturan batas memori ini diterapkan secara langsung melalui berkas konfigurasi unit service Systemd tanpa perlu memodifikasi kode sumber aplikasi. Parameter utama yang digunakan adalah MemoryMax, MemoryHigh, dan MemoryLimit yang masing-masing memiliki ambang batas perilaku berbeda terhadap manajemen alokasi RAM kernel Linux.
Parameter Utama Memory Cgroups pada Systemd
Systemd menyediakan beberapa direktif pengelolaan memori yang dapat disematkan di dalam blok [Service] pada berkas unit (misalnya /etc/systemd/system/nama-service.service). Pemahaman fungsi tiap parameter mencegah kesalahan konfigurasi yang menyebabkan aplikasi terhenti mendadak.
| Parameter Systemd | Setara cgroups v1 | Fungsi & Perilaku Utama |
|---|---|---|
MemoryMax |
memory.max |
Batas absolut penggunaan memori. Jika terlampaui, kernel memicu OOM pada proses di cgroup tersebut. |
MemoryHigh |
memory.high |
Ambang batas kuota lunak (soft limit). Jika terlewati, proses akan diperlambat (throttled) dan dipaksa melakukan reclaim memori. |
MemoryLow |
memory.low |
Proteksi memori minimal. Kernel akan berusaha menjaga agar cgroup ini tidak ditekan di bawah batas tersebut. |
MemoryLimit |
memory.limit_in_bytes |
Parameter warisan (deprecated) cgroups v1 untuk menetapkan batas maksimum memori. Disarankan beralih ke MemoryMax. |
Langkah Konfigurasi Memory Limit pada Systemd Service
Penerapan batas memori pada sebuah service kustom memerlukan modifikasi direktori unit service. Berikut adalah prosedur teknis langkah demi langkah:
- Buka atau buat berkas override untuk service target menggunakan perintah editor terminal:
sudo systemctl edit nama-service - Tambahkan blok konfigurasi
[Service]beserta batasan memori yang diinginkan pada editor yang terbuka. Contoh di bawah membatasi service maksimal menggunakan RAM sebesar 500 Megabita:
[Service] MemoryMax=500M MemoryHigh=400M - Simpan berkas dan keluar dari editor teks.
- Muat ulang (reload) daemon Systemd agar membaca konfigurasi terbaru:
sudo systemctl daemon-reload - Restart service terkait untuk menerapkan perubahan cgroups:
sudo systemctl restart nama-service
Verifikasi Penggunaan Cgroups Memory
Setelah service berjalan dengan aturan pembatasan baru, administrator wajib memverifikasi apakah cgroups telah aktif mengontrol alokasi memori proses tersebut. Perintah utama untuk melakukan pengecekan real-time adalah menggunakan utilitas systemd-cgtop atau memeriksa status service secara spesifik.
Jalankan perintah berikut di terminal untuk memantau penggunaan sumber daya secara menyeluruh:
systemd-cgtop
Atau untuk memeriksa detail alokasi memori pada satu unit service tertentu, gunakan:
systemctl status nama-service
Perintah tersebut akan menampilkan baris informasi Memory: [jumlah_memori] yang menunjukkan konsumsi RAM aktual di bawah kontrol cgroups Systemd.
Troubleshooting Kendala OOM Killer
Jika aplikasi sering berhenti secara tiba-tiba dengan status keluar (exit code) 137 atau pesan Out of Memory di dalam log sistem (journalctl -u nama-service), artinya proses telah melampaui batas absolut MemoryMax.
Langkah penanganan di lapangan mencakup:
- Tinjau ulang nilai
MemoryMaxdan tingkatkan alokasinya jika aplikasi memang membutuhkan footprint RAM lebih besar saat lonjakan trafik. - Manfaatkan parameter
MemoryHighdengan nilai lebih rendah dariMemoryMaxagar kernel dapat melakukan pembatasan kecepatan alokasi (throttling) terlebih dahulu alih-alih langsung mematikan proses. - Periksa potensi kebocoran memori pada aplikasi dengan profiling kode atau utilitas monitoring eksternal.