Anatomi Bottleneck: Page Cache dan Throttling 'balance_dirty_pages'
TEXT
+------------------+
| WHMCS API Hooks | (100+ proses paralel createacct)
+--------+---------+
|
v [Buffered Writes: skeleton, DB, SSL certs]
+------------------------------------------------+
| Linux Page Cache (RAM) |
| [Dirty Page] [Dirty Page] [Dirty Page] ... |
+------------------------------------------------+
|
+--> Jika dirty pages melampaui dirty_background_ratio:
| Kernel flusher aktif menulis ke NVMe secara asinkron.
|
+--> Jika dirty pages melampaui dirty_ratio:
SEMUA PROSES PENULISAN DI-PAUSE!
Kernel memanggil balance_dirty_pages() secara sinkron.
Nginx, MariaDB, & PHP-FPM tenant ikut terblokir.Perbedaan Beban Arsitektur: DirectAdmin vs cPanel
DirectAdmin
cPanel & WHM
Diagnostik Real-Time: Menangkap Flusher Saturation
BASH
watch -n 1 'grep -E "Dirty|Writeback" /proc/meminfo'BASH
vmstat 1 10TEXT
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 48 0 1284500 48200 184592000 0 0 120 892400 14200 28400 4 12 0 84 0BASH
/usr/share/bcc/tools/biolatency -m 5Rekayasa Solusi: Tuning Kernel VM dan Isolasi cgroup v2
1. Migrasi dari Persentase ke Batasan Byte Mutlak
INI
# Mulai background writeback saat dirty memory mencapai 256MB
vm.dirty_background_bytes = 268435456
# Paksa proses penulisan melakukan flush sinkron jika mencapai 1GB
# Mencegah akumulasi dirty pages puluhan gigabyte di RAM
vm.dirty_bytes = 1073741824
# Kurangi interval pengecekan dirty page oleh pdflush/flusher (dalam 1/100 detik)
vm.dirty_writeback_centisecs = 100
# Kurangi umur maksimal sebuah dirty page di RAM sebelum wajib di-flush (3 detik)
vm.dirty_expire_centisecs = 3002. Optimasi Filesystem Mount (XFS vs ext4)
TEXT
UUID=xxxx-xxxx /home ext4 noatime,lazytime,commit=30,barrier=1,data=ordered 0 23. Isolasi I/O Provisioning Menggunakan cgroup v2
INI
[Unit]
Description=Slice untuk Task Provisioning dan Migrasi Akun
Before=slices.target
[Slice]
# Berikan bobot I/O yang sangat rendah dibanding traffic web (default 100)
IOWeight=20
# Batasi throughput penulisan maksimal ke storage pool agar tidak membanjiri IOPS NVMe
IOReadIOPSMax=/dev/disk/by-id/nvme-pool 5000
IOWriteIOPSMax=/dev/disk/by-id/nvme-pool 3000
MemoryHigh=8G
MemoryMax=12GBASH
systemctl daemon-reloadBASH
systemd-run --slice=provisioning.slice --scope /usr/local/cpanel/scripts/createacct [arguments...]Evaluasi Parameter: Kondisi Default vs Tuning Produksi
| Parameter Kernel | Nilai Default Linux | Nilai Hosting Teroptimasi | Dampak Mekanisme |
|---|---|---|---|
vm.dirty_background_ratio | 10% (~25.6GB) | 0 (dinonaktifkan) | Menghindari penggunaan persentase statis pada memori masif. |
vm.dirty_background_bytes | 0 | 268435456 (256MB) | Flusher thread aktif jauh lebih awal, write flow menjadi kontinu. |
vm.dirty_ratio | 20% (~51.2GB) | 0 (dinonaktifkan) | Mencegah penundaan writeback yang berujung pada starvation. |
vm.dirty_bytes | 0 | 1073741824 (1GB) | Membatasi penulisan sinkron agar tidak melebihi kemampuan absorpsi cache controller