Sobat, kekhawatiran terkait konsumsi RAM (memori kerja utama server) sering kali muncul saat kita hendak memperbesar alokasi buffer di Nginx (aplikasi web server). Seorang klien pernah dengan cemas menanyakan apakah setelan FastCGI buffer (alokasi RAM sementara untuk menampung data dari PHP) sebesar 16×64 KB (1 MB) akan menguras habis memori pada server berkapasitas 3 GB jika ada 200 request (permintaan akses pengunjung) yang masuk secara bersamaan.
Saat mendampingi klien tersebut, saya menjelaskan bagaimana alokasi memori Nginx sebenarnya bekerja. Pengalokasian FastCGI buffer di Nginx pada dasarnya bersifat dinamis (bekerja secara bertahap sesuai kebutuhan riil, bukan mengunci memori di awal). Nginx tidak langsung menyita RAM sebesar 1 MB untuk tiap pengunjung, melainkan hanya mengambil unit buffer 64 KB secara perlahan sesuai ukuran aktual halaman yang dimuat. Dengan pemahaman ini, pemilik bisnis bisa merasa tenang karena server tetap bekerja aman dan efisien tanpa harus khawatir mengenai lonjakan penggunaan memori.
Simulasi Kalkulasi RAM (200 Request Simultansi)
Berikut adalah perhitungan pada skenario beban tinggi (200 request bersamaan yang semuanya memuat halaman 667 KB):
Maksimal Buffer per Request : 16 x 64 KB = 1024 KB (1 MB)
Jumlah Request Simultansi : 200 request
Total Konsumsi RAM Nginx : 200 x 1 MB = 200 MB RAM
Dari kalkulasi di atas, Nginx hanya mengonsumsi sekitar 200 MB RAM dari total ketersediaan RAM 3 GB. Ini menunjukkan alokasi tersebut sangat aman.
Penggunaan Memori Dinamis untuk Halaman Kecil
Jika pengunjung membuka halaman yang hanya berukuran 67 KB, penggunaan RAM disesuaikan secara otomatis:
Ukuran Halaman : 67 KB
Unit Buffer Terpakai : Hanya 2 buffer (2 x 64 KB = 128 KB)
Sisa Alokasi Buffer : 14 buffer tidak dialokasikan di RAM
Pengaturan Worker PHP-FPM untuk Mencegah OOM
Konsumsi RAM terbesar pada web server biasanya berasal dari PHP-FPM dan Database. Agar RAM tidak habis dan memicu Out-Of-Memory (OOM) Killer, jumlah worker PHP-FPM perlu dibatasi di file /etc/php/8.4/fpm/pool.d/www.conf:
; Batas worker PHP-FPM untuk server RAM 3 GB
pm = dynamic
pm.max_children = 35 ; 35 worker x ~40 MB = ~1.4 GB RAM maksimal
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
Pemahaman matematis mengenai alokasi memori ini sangat membantu kita menjaga performa server tetap stabil dan aman tanpa rasa khawatir. Penanganan kendala seperti ini tidak selalu membutuhkan perombakan kapasitas perangkat fisik, melainkan kunci utamanya terletak pada optimasi konfigurasi buffer dan worker (proses latar belakang pemroses script PHP) secara presisi. Semoga pembahasan sederhana ini bisa memberikan gambaran jernih, sekaligus menjadi solusi praktis bagi Sobat yang sedang menghadapi kendala serupa di servernya.