Vein

Short notes on latency, links and small self-hosted systems.

Why I still read man pages

2026-11-01

Search results answer the question you typed. A man page answers the question you should have asked. Reading the whole entry for a tool I use daily almost always turns up a flag that replaces a small script I wrote years ago.

The trick is to read them when nothing is on fire. Under pressure you skim for the one line you need and miss the paragraph that explains why it behaves strangely.

Leave headroom

2026-10-31

Running a machine at ninety percent memory or CPU looks efficient on a graph. In practice it means there is no room for the burst that always comes, and the burst then turns into swapping, timeouts and restarts.

Planning for half to two thirds of capacity in normal operation feels wasteful until the first traffic spike passes without anyone noticing.

A small server's memory

2026-10-30

On a machine with little memory, every resident process counts. Language runtimes, idle workers and generous caches add up quickly, and the page cache, which keeps the system responsive, is what gets squeezed first.

Watching the available memory figure rather than the free one gives a more honest picture. Free memory is often low on a healthy system, because unused memory is put to work caching files.

Swap is not a dirty word

2026-10-29

People disable swap on small servers to keep things snappy, then wonder why the kernel kills a process when memory gets tight. A little swap gives the kernel somewhere to put pages that are never touched again.

It will not save a machine that genuinely needs more memory. But it smooths over the short spikes, and it makes the difference between a slow moment and a dead service.

What uptime really measures

2026-10-28

A server with five hundred days of uptime is often admired, but it also means five hundred days without a kernel update and without proof that it boots cleanly.

I prefer to reboot on purpose, at a quiet time, every month or two. The machine comes back with current software, and I find out about broken boot configurations while I am awake and watching.

Quiet hours

2026-10-26

Scheduling heavy jobs for the middle of the night made sense when everyone shared one time zone. Today "quiet" depends on where the users are, and the quietest hour may be in the middle of someone's afternoon.

Looking at the actual traffic graph for a week before choosing a maintenance window avoids a surprising number of complaints.

Notes on file permissions

2026-10-25

The simplest permission model is still the most useful one: each service runs as its own user and owns only the files it needs. Everything else is readable at most, and secrets are readable only by their owner.

It sounds obvious, yet many small servers run everything as the administrator because it was easier on day one. Untangling that later takes far longer than setting it up properly at the start.

The paper notebook

2026-10-24

For all the tools available, a paper notebook remains my favourite debugging aid. Writing down each hypothesis and its result slows me down just enough to think, and it leaves a record when the problem returns.

It also works when the machine I am debugging is the one I would normally take notes on.

Recovering from a full inode table

2026-10-23

A disk can be full even when plenty of space is free, because every file needs an entry in a fixed-size table. Millions of tiny files, often from a runaway cache or mail queue, can exhaust it.

The symptom is confusing: writes fail, yet the usage figure looks fine. Checking inode usage alongside space takes one extra command and saves a confusing afternoon.

Bandwidth is not speed

2026-10-22

A wider pipe lets more data through at once, but it does not make any single exchange arrive sooner. For loading a small web page, the round trip time usually matters more than the capacity of the link.

That is why upgrading a connection sometimes changes nothing people notice. The downloads get faster; the clicking around does not.

Older notes →