Low TPS or changed gameplay
Find the relevant bottleneck or control before buying capacity or disabling modules.
Low TPS and high MSPT
Profile while the issue occurs using the measurement workflow. Record player activity, plugins, chunks, distances, disk, and available CPU. A normal mean can hide spikes; worker time is not a percentage of tick time saved.
Crowded hubs need fan-out/network checks; spread survival often needs chunk/simulation checks. Extra I/O threads do not repair a costly plugin handler.
Heap or GC pressure
Separate heap, process memory, and container limits. Observe post-GC usage and growth. Investigate retention rather than increasing Xmx from one peak. Leave memory outside heap. Container kills may occur without a Java heap OOM message.
Growing I/O queues
Check full storage, permission errors, write failures, and latency. Warning thresholds do not reject new latest snapshots, so retained memory can grow. Increasing thresholds hides alarms. Reduce heavy activity and plan clean shutdown after assessing disk health.
Slow pregen
Read nusa pregen status. It may be paused/throttled, finding existing/skipped chunks, or waiting for in-flight work. Pause stops admission, not accepted requests. Progress does not survive restart. Consult the pregen guide before increasing limits.
Changed mechanics
| Symptom | Check |
|---|---|
| Invisible mobs | mob-tracker, LOS culling, plugin hide/show, geometry, native range |
| Stationary/no-target mobs | mob-ai, villager ticking, ticking mode, plugin AI |
| Restocking/weather/farms stopped | HUB and related ticking switches |
| Mob item pickup stopped | pickup policy and AI needed for seeking |
| Different idle hopper timing | spreading flag/groups and inventory listeners |
| Less smooth distant players | far-interval, combat priority, transport pressure |
Test one change on staging and restart. Revert if unrelated. Never bypass thread ownership or delete data to hide an unexplained symptom.