Stop your server from stalling out on big writes
Performance Tuning & Kernel Parameters (Sysctl)
Stop your server from stalling out on big writes
🧩 The Challenge
Ever had a database server or an analytics box just… freeze up for a minute or two when it’s doing a huge write operation? You kick off a big `mysqldump` or a log processing job that writes gigabytes, and suddenly `ssh` gets sluggish, keyboard input lags, and `top` shows processes stuck in `D` state. It’s maddening, and it feels like nobody tells you why.
💡 The Fix
This happens because the kernel’s letting too much “dirty” data pile up in memory before it flushes it to disk. A couple of `sysctl` parameters control how much of that buffered write data can accumulate. Tweaking them means your system starts writing back to disk sooner and more frequently, preventing those nasty, system-wide I/O stalls.
To check current values:
sysctl vm.dirty_ratio
sysctl vm.dirty_background_ratio
To set them (temporarily):
sudo sysctl -w vm.dirty_ratio=10
sudo sysctl -w vm.dirty_background_ratio=5
To make persistent (add to `/etc/sysctl.d/99-dirty-tweak.conf`):
echo "vm.dirty_ratio = 10" | sudo tee /etc/sysctl.d/99-dirty-tweak.conf
echo "vm.dirty_background_ratio = 5" | sudo tee -a /etc/sysctl.d/99-dirty-tweak.conf
Then apply with:
sudo sysctl -p /etc/sysctl.d/99-dirty-tweak.conf
⚙️ Why It Works
Linux buffers writes in RAM (the page cache) to optimize I/O. `vm.dirty_background_ratio` is when the kernel starts writing that data to disk in the background. But `vm.dirty_ratio` is the hard stop: once that percentage of memory is “dirty,” *all* new I/O stalls until enough data is written out. Lowering these values forces the kernel to flush smaller chunks more often, avoiding the huge, blocking write storms.
🚀 Pro-Tip: For consistent behavior on servers with varying RAM, especially databases, consider using `vm.dirty_bytes` and `vm.dirty_background_bytes` instead of percentages.
Linux Tips & Tricks | © ngelinux.com | 9/7/2026
