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.
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.
No roundups, no “5 tools you must try.” Just the posts, when there is something worth sending.