Short answer
Open the crash report the server wrote on its way down. The first line names the cause: java.lang.OutOfMemoryError is memory, a Caused by: from a plugin is that plugin, and "A single server tick took ... seconds" is the watchdog killing a server that hung. Fix that one cause, then start again and read the next report.
A crashed server is easier to fix than slow server, because the crash leaves evidence. The server writes a report in crash-reports before it exits, names the exception, and prints the line that tripped it. Admin experience mostly comes from recognising the handful of exceptions that fill those reports.
This guide covers where the evidence lives, the four crash shapes you will meet, and how to tell a repeat crasher from a one-off. It pairs with the memory guide for the exception you will see most often.
Before you start
- File access to the crash reports and logs
- Panel access to restart and to read the previous session
- The time the crash happened, to find the right log
1. Find the crash report
When the server dies, it writes a file into the crash-reports folder named for the moment it crashed, and the console prints the path. The same text goes to the log file, so the console alone is enough if you cannot reach the files.
Note whether the crash happened during play or during startup. A plugin failing to enable crashes the server before anyone joins; a tick overrun crashes it in the middle of a session. The two need different fixes.
crash-reports/
2026-10-15-12.03.11-server-crash.txt
logs/
latest.log2. Read the first exception, not the last stack line
The top of the report names the exception. Everything below it is the stack: which code threw, and from where. The Caused by: chains at the bottom are where the original cause hides, because the first exception is often a symptom of a plugin that already misbehaved.
Read the first exception and the last Caused by:. That pair is the cause. Anything in between is a detail that only matters once the cause is fixed.
java.lang.OutOfMemoryError: Java heap space
at net.minecraft.server.MinecraftServer.tick(...)
...
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded3. Tell the four shapes apart
Most crashes fall into four groups, and each has a known fix. Match the report to the group before changing anything.
java.lang.OutOfMemoryError: the heap ran out. Give the JVM more memory, or find the plugin or world holding onto it. Out-of-memory guide.NoSuchMethodErrororClassNotFoundExceptionduring startup: a plugin was built for another server version or another API. Update or remove it.- "A single server tick took 60.00 seconds": the watchdog killed a hung server. Usually an entity or chunk problem the tick could not finish. Reduce server lag.
- Crash in the middle of a chunk load with a UUID or region error: the world files are damaged. Restore from a backup before playing on again.
4. Isolate the crasher when the report blames a plugin
If the report points into a plugin, disable that one plugin first and restart. If it still crashes, disable half the remaining plugins and repeat. This binary search finds the culprit in a few restarts instead of a dozen.
For a crash that only happens during play, reproduce it: start the server, log in with the same accounts, and do what the players did before it died. The crash report will differ from the previous one only if a different cause is now in charge, which tells you the plugin was a symptom.
Two reports in a row that name different plugins usually mean one plugin is not the problem at all. Look at what the two have in common: a shared dependency or a common event they both subscribe to. /version <plugin_name> prints a plugin's version and the server version it was built for, which is usually the whole story.
/plugins
/version <plugin_name>5. Start again and confirm
Restart, play for as long as the previous session lasted, and check that the server stayed up. If it crashes again, read the new report: it will name the next cause, because the original one is gone. Two reports in a row naming different plugins means neither was the real problem, and the shared dependency is.
Once it is stable, keep the crash reports. The next time the same thing happens, the pattern across reports is the fastest diagnosis you will get.
Good to know
- Crash reports contain player names, IP addresses and sometimes chat. Trim them before posting in public.
- A crash on the same tick every time is a single cause and usually has a single fix. A crash that moves around between sessions is several causes wearing the same mask.
- Back up before you start isolating anything. Most of the fixes here are safe, but a damaged world needs restoring far more often than it needs plugins disabled.
Common questions
Where are the crash reports?
In the crash-reports folder in the server root, one file per crash, named for the time it happened. The console prints the same text at the moment of the crash, so you can read it there if you cannot open files.
Why does my server crash only when players are online?
Because the work that crashes it only happens then: an entity farm, a plugin reacting to a player, a chunk generating for the first time. Reproduce with the same accounts and the same actions, and read the report from that moment rather than the startup log.
Is it safe to disable the watchdog?
No. Setting max-tick-time=-1 stops the server from killing itself during a hung tick, but the hang is what damages chunks and fills the disk on some systems. Find and fix the hang instead.
How do I tell a crash caused by a plugin from one caused by the world?
Read the first exception in the report. If it points into plugin code, it is the plugin. If it points into chunk loading or region files, it is the world, and restoring the affected files is the fix.
Sources
Official documentation this guide was checked against.
Rather not run this on your own machine? PufferHost gives every player a free Minecraft server with 3 GB of RAM and 10 slots. Create a free server.