Systems
Performance
Craft
Systems
Engineering
A 1.7 GB MariaDB process looked like the obvious culprit. The real problem was a PHP script with no memory limit and a server with no swap.
A worker measured 30 MB when fresh and 97 MB forty hours later, on an idle server. Nothing was leaking — that is simply how PHP returns memory.
Debian ships the setting commented out, so a multi-gigabyte database runs on a 128 MB cache and burns CPU re-reading the same pages forever.
Without swap, the first allocation that cannot be satisfied is immediately fatal to something — and the kernel picks its victim by size, not by blame.
If every mistyped URL returns your home page with a 200, search engines will index all of them as real pages — and split your ranking across the duplicates.
A static sitemap.xml wins over any dynamic route, and a generator that walks the filesystem cannot see content stored in a database.
An hour lost to a two-megabyte upload limit that did not exist, because the value came from the wrong SAPI.
Page views, top pages and per-site traffic, from the file already on your disk — no JavaScript, no third party, no Elasticsearch.
Every quota you invent is a second number to keep in sync with reality. The filesystem already knows how much space there is.
No roundups, no “5 tools you must try.” Just the posts, when there is something worth sending.