Anatomi Malapetaka: Mengapa Core Engine Menjadi Korban OOM
kswapd dan direct reclaim) gagal membersihkan anon memory yang aktif ditulis. Linux OOM Killer terpanggil. Algoritma oom_badness() di Linux kernel secara default menghitung skor eliminasi berdasarkan proporsi konsumsi memori fisik (anon_rss + file_rss + shmem) terhadap total memori. Engine transaksi yang memakan 2.5 GiB memori sah langsung menjadi target paling empuk dengan skor OOM tertinggi, sedangkan sidecar audit yang baru saja melompat dari 300 MiB ke 1.2 GiB dan menjadi pemicu kepanikan justru dibiarkan hidup. Transaksi perbankan terhenti seketika, menghasilkan error 502 bertingkat pada switch gateway.
Beralih ke cgroup v2: Membedah Mekanisme Throttling vs Hard Ceiling
memory.limit_in_bytes. Jika batas tersebut tertembus dan kernel tidak bisa mereklamasi page cache, OOM Killer akan langsung diinvokasi secara destruktif. Di sinilah cgroups v2 mengubah paradigma melalui pemisahan kontrol bertingkat: memory.min, memory.low, memory.high, dan memory.max.
Perbedaan paling krusial bagi workload audit perbankan terletak pada memory.high. File kendali ini bertindak sebagai throttler sebelum hard limit (memory.max) tersentuh. Ketika konsumsi memori daemon audit melampaui memory.high, kernel Linux tidak langsung membantai proses tersebut. Sebagai gantinya, kernel memaksa thread alokasi daemon masuk ke loop mem_cgroup_handle_over_high(), menyuntikkan latency sleep proporsional ke thread yang bersangkutan dan memaksa proses melakukan synchronous direct reclaim pada jatah CPU-nya sendiri. Proses audit mengalami backpressure alami dan melambat, tetapi runtime transaksi inti di sampingnya tidak mengalami OOM panic.
INI
# Konfigurasi slice systemd / cgroup v2 untuk Daemon Audit ITSK
[Service]
MemoryAccounting=yes
MemoryLow=256M
MemoryHigh=768M
MemoryMax=1024M
OOMScoreAdjust=900Menyelamatkan Core Transaction Engine dengan memory.low dan oom_score_adj
memory.low pada cgroup core process, kita memberikan sinyal ke kernel bahwa memori di bawah ambang batas tersebut adalah best-effort protected. Selama ada cgroup lain di dalam node yang mengonsumsi memori di atas nilai memory.low mereka, kernel akan memprioritaskan perebutan page cache dari cgroup yang melanggar batas tersebut sebelum menyentuh engine pembayaran.
Selain itu, mitigasi deterministik wajib dipasang pada konfigurasi oom_score_adj. Daemon audit log yang bertindak sebagai agen pelaporan ITSK harus diberi nilai offset positif yang tinggi (misalnya +900), sedangkan engine transaksi perbankan dikunci pada nilai negatif atau netral (misalnya -500). Jika degradasi infrastruktur node berada pada titik ekstrem di mana direct reclaim tidak lagi mampu mengejar laju transaksi, kernel akan secara mutlak memilih mematikan daemon audit terlebih dahulu. Di ranah operasional perbankan, kehilangan buffer log audit sementara jauh lebih dapat ditoleransi melalui mekanisme fallback file storage lokal daripada membiarkan proses settlement transaksi mati di tengah jalan.
YAML
# Snippet Pod Spec: Memisahkan limit cgroup v2 per container
apiVersion: v1
kind: Pod
metadata:
name: payment-core-gateway
spec:
containers:
- name: tx-engine
resources:
requests:
memory: "2Gi"
limits:
memory: "3Gi"
- name: itsk-audit-sidecar
resources:
requests:
memory: "256Mi"
limits:
memory: "1Gi"Menghindari Pitfall memory.oom.group pada Arsitektur Pod
memory.oom.group. Jika parameter ini bernilai 1, kernel akan memperlakukan seluruh cgroup sebagai satu kesatuan nasib: jika satu proses di dalam cgroup terkena OOM Killer, kernel akan mengirimkan sinyal SIGKILL ke seluruh proses lain dalam hierarki cgroup yang sama. Fitur ini sangat berguna untuk aplikasi multi-proses seperti database engine yang tidak ingin mengalami status korup parsial.
Namun, pada node container perbankan yang menggabungkan engine pembayaran dan sidecar telemetri dalam satu Pod cgroup tree, mengaktifkan memory.oom.group = 1 adalah resep bencana. Hal ini meniadakan seluruh isolasi proses yang kita bangun; pembengkakan buffer sidecar audit akan otomatis menyeret container engine pembayaran ke liang kubur. Pastikan container runtime Anda (seperti containerd v1.7+ dengan runc modern) mengelola cgroup container secara modular di bawah sub-tree cgroup Pod tanpa menyalakan memory.oom.group di level induk pod, kecuali jika container tersebut memang didesain untuk fail-together.
Refleksi Arsitektural Menuju Standar 2026
memory.high sebagai peredam lonjakan buffer dan memory.low sebagai benteng engine utama—arsitek infrastruktur dapat memastikan bahwa pemenuhan mandat kepatuhan ITSK berjalan selaras dengan zero-downtime availability pada sistem perbankan nasional.