Lag is the most common complaint on any Minecraft server, and the most common reaction is to add RAM or upgrade the host. Sometimes that helps. More often the cause is something specific on the server that keeps growing: a farm, a plugin, a patch of loaded chunks. Here's a practical way to find it.
First, work out which kind of lag it is
- Server lag: everyone lags at once. Blocks reappear after you break them, mobs freeze and jump, and commands respond slowly. This is the server falling behind.
- Network lag: one player, or a few, rubber-band or see others teleporting, while everyone else is fine. That's their connection or their route to your server.
- Client lag: low frame rate for one player, usually from heavy resource packs, shaders, or too high a render distance on their side.
Only server lag is yours to fix on the server, so confirm that's what you have before changing anything.
TPS tells you there's a problem; MSPT tells you how close you are
A Minecraft server aims for 20 ticks per second, which gives it a budget of 50 milliseconds per tick. TPS (ticks per second) only drops below 20 once the server is already over budget. MSPT (milliseconds per tick) shows how much of the budget you're using, so it warns you earlier: a server at 45 MSPT still shows 20 TPS but is one busy moment away from lagging. On Paper, /mspt and /tps show both.
Profile it instead of guessing
A profiler records where the server spends its time, so you can see the cause instead of guessing at it. The standard tool is spark: recent Paper versions include it, and it's a free plugin for other servers. Start a profile while the lag is happening (/spark profiler start), let it run for a few minutes, stop it, and open the report link. Look for what takes the biggest share of each tick: entities, block entities such as hoppers, chunk loading and generation, or a particular plugin.
The usual suspects
- Too many entities. Mob farms that never get culled, animal pens that keep breeding, and piles of dropped items. A handful of chunks with hundreds of entities can cost more than the rest of the world combined.
- Hoppers and redstone. Long hopper chains and redstone clocks that run all the time, even when no one is nearby, add up.
- Chunk generation. Players exploring new terrain force the server to generate chunks on the fly, which is expensive. Pre-generating your world with a plugin such as Chunky moves that cost to a quiet time.
- View and simulation distance. Every extra chunk of distance multiplies the area the server keeps loaded and ticking. Lowering simulation distance in particular often helps more than it hurts.
- Plugins. A plugin doing heavy work on the main thread shows up clearly in a spark report. Check whether it has a setting to do less, or a lighter alternative.
Fix one thing, then measure again
Change one thing at a time and compare MSPT before and after, so you know what actually helped. Paper's configuration files also have settings that limit common sources of lag, such as how entities and items behave; change them gradually and keep a note of what you changed. And keep a baseline: note your normal MSPT when the server is healthy, so you notice when it starts creeping up.
Lag builds up over time
Most servers don't lag on day one. Lag arrives slowly as farms grow, builds get bigger, and plugins pile up, until one day the server tips over its budget. We call that slow build-up performance debt, and it's the problem we're designing CullMC around: making the things that are quietly costing your server visible, from inside the server, before players feel them. CullMC is planned, and nothing is built or installable yet; you can see where it stands on our products page. Until then, spark and the steps above will find most of what's slowing your server down.