Reading Minecraft Server Logs and Crash Reports
Find latest.log and crash reports, read a stack trace to name the bad mod or plugin, decode the common startup errors, and bisect a broken server.
A Minecraft server that will not start has almost always already told you why — in one line, buried in a few hundred lines of normal startup output. This guide covers where that output lives, how to read a stack trace well enough to name the mod or plugin at fault, how to find a bad one by bisection when the log does not name it, and the specific errors you are most likely to hit.
It applies to any Java Edition server on your Minecraft server — vanilla, Paper, Purpur, Fabric, Forge or NeoForge; Minecraft Server Software Compared covers the differences between them. For the separate problem of a server that starts fine but nobody can join, see Minecraft Players Can't Connect. Six specific error messages have a page of their own; the table below is the index.
No error message yet?
This page is organised by the exact text of an error, which assumes you have one. If your console just stops, or the panel never goes green, and there is nothing obvious to copy, start at Minecraft Server Won't Start instead — it sorts by what you observe and routes back here once you have a message.
Named Errors With Their Own Page
Six messages come up often enough — and are misdiagnosed often enough — to have a page each. If a line in your log or on a player's screen matches one of these word for word, start there:
| The exact message | Where it appears | Page |
|---|---|---|
Error: Unable to access jarfile <name> |
Console, before any log file is written at all | Minecraft "Error: Unable to access jarfile" |
**** FAILED TO BIND TO PORT! |
Console, during startup | Minecraft "Failed to Bind to Port" |
java.lang.OutOfMemoryError: Java heap space |
logs/latest.log, usually with a crash report |
Minecraft "java.lang.OutOfMemoryError: Java heap space" |
Can't keep up! Is the server overloaded? |
logs/latest.log, while the server is running |
Minecraft "Can't keep up! Is the server overloaded?" |
Failed to verify username! |
On the player's screen, at login | Minecraft "Failed to verify username!" |
Connection closed - mismatched mod channel list |
On the player's screen, Forge only | Minecraft "Connection closed - mismatched mod channel list" |
Everything else is covered on this page rather than on a page of its own — with one exception. A configuration file the server cannot parse does not produce a stack trace you read the way you read the ones below; SnakeYAML and Gson both report the file, the line and the column that broke, and are read on their own terms in Fixing YAML and JSON Config Errors on a Minecraft Server.
Where the Output Lives
There are four places to look, and they hold different things.
| Location | Holds | Use it for |
|---|---|---|
| Console tab in the panel | Live output from the running process | Watching a start attempt in real time |
logs/latest.log |
The current run, from the first line | Anything you missed, and everything before a crash |
logs/YYYY-MM-DD-N.log.gz |
Previous runs, gzip-compressed | The run that actually broke, after you restarted |
crash-reports/crash-<timestamp>-server.txt |
A full crash report, written only when the server crashes | Hard crashes and watchdog kills |
Two things about that table matter more than the rest:
- The Console tab only shows the current session. Restart the server and the evidence you needed scrolls away.
logs/latest.logdoes not — open it in the File Manager, or pull it down over SFTP (How to upload files via SFTP covers the connection). - Rotated logs are gzipped. If the failure was two restarts ago, the log you want is a
.log.gz, notlatest.log. Download it and open it locally.

A crash report is written only for a genuine crash, not for every error. When one is produced, the console says so:
[Server thread/ERROR]: This crash report has been saved to: ./crash-reports/crash-2026-08-19_04.11.32-server.txt The file itself opens like this:
---- Minecraft Crash Report ----
// I let you down. Sorry :(
Time: 2026-08-19 04:11:32
Description: Exception in server tick loop
java.lang.NullPointerException: Cannot invoke "..." because "..." is null
at ... The comment line after the header is one of a rotating set of jokes Mojang ships with the game; ignore it. Description: is the field that matters — it names the phase the server died in. Exception in server tick loop, Exception ticking world and Watching Server (the watchdog) are the three you will see most.
How to Read a Stack Trace
A stack trace is one exception line followed by a stack of at lines. Read it in this order.
1. The top line: what actually went wrong.
java.lang.OutOfMemoryError: Java heap space Everything before the colon is the exception type. Everything after it is the message. Together they are what you search for, and what you quote in a ticket.
2. The at lines: where it went wrong. Read them top-down and stop at the first line that is not net.minecraft, org.bukkit or java.base — that package name is usually the culprit.
java.lang.NullPointerException: Cannot read field "level" because "entity" is null
at com.example.grieflog.EntityListener.onDeath(EntityListener.java:88) <-- this one
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306)
at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:412) com.example.grieflog is a third-party package, so GriefLog is the plugin to update or remove. PaperMC's own basic troubleshooting guide puts it plainly: in most cases the plugin whose name appears in the stack trace is the one causing the problem.
3. Caused by: — read to the bottom. When a trace has one or more Caused by: blocks, the last one is the real fault. The blocks above it are just wrappers.
java.lang.RuntimeException: Failed to load plugin
at ...
Caused by: java.lang.NoClassDefFoundError: net/milkbowl/vault/economy/Economy NoClassDefFoundError on a class from another project means a missing dependency — here, Vault.
Read from the bottom of the log, not the top
Startup output is long and mostly uninteresting. Open
latest.log, jump to the end, and scroll up until you find the firstERRORorCaused by:. The last thing the server said before it stopped is nearly always the reason it stopped.
Startup Errors, in the Order You Hit Them
Error: Unable to access jarfile
Error: Unable to access jarfile server.jar The earliest failure there is. This comes from the java launcher, before the Java Virtual Machine starts, so no log file is written at all — if logs/latest.log is still from an earlier run, that confirms it. It means the file named by the Server Jar File variable is missing or unreadable, usually because the name does not match, the jar is in a subfolder, or the install did not finish. Minecraft "Error: Unable to access jarfile" covers it, along with its four look-alikes: Invalid or corrupt jarfile, no main manifest attribute, Could not find or load main class and could not open 'unix_args.txt'.
You need to agree to the EULA
[ServerMain/WARN]: Failed to load eula.txt
[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. The server generates eula.txt on its very first run and exits:
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#[Generation time]
eula=false Change eula=false to eula=true in the File Manager and start again. The Failed to load eula.txt warning on a brand-new server is normal — the file did not exist yet.
FAILED TO BIND TO PORT!
[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: java.net.BindException: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port? The server could not take the port it was told to listen on. On managed hosting there are two realistic causes:
- The old process is still running. A stop that did not complete leaves the port held. Use Restart, or stop and wait for the console to confirm it exited before starting again.
server-iporserver-portwas edited by hand. Both are managed by the panel.server-ipshould stay empty, which means "listen on every interface"; the Minecraft Wiki names an address inserver-ipthat the machine does not own as the single most common cause of this error.server-portmust stay on your panel allocation — the panel syncs it on boot, so a hand-edited value only breaks the next start.
The middle line is the one to read, because it names the underlying failure and the third line is printed unconditionally whatever it was. Minecraft "Failed to Bind to Port" works through each exception text, and covers why Paper turns this into a crash report while vanilla exits quietly.
UnsupportedClassVersionError — Wrong Java Version
This one has become common, because Minecraft moved its Java requirement in 2026 and a lot of servers were carried across without their runtime.
Exception in thread "ServerMain" java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been compiled by a more recent version of the Java Runtime (class file version 69.0), this version of the Java Runtime only recognizes class file versions up to 65.0 Read the two numbers. The first is what the jar needs; the second is what your runtime provides. Both are class file versions, not Java versions, and the conversion is simply Java version + 44:
| Class file version | Java version | Minecraft releases that need it |
|---|---|---|
| 52.0 | Java 8 | 1.12 through 1.16.5 |
| 60.0 | Java 16 | 1.17, 1.17.1 |
| 61.0 | Java 17 | 1.18 through 1.20.4 |
| 65.0 | Java 21 | 1.20.5 through 1.21.11 |
| 69.0 | Java 25 | 26.1 and newer |
So 69.0 needed, 65.0 available means a 26.x server jar on a Java 21 runtime. Mojang publishes the requirement per version in its own version manifest — the 26.2 entry carries "java_version": 25 — and PaperMC states the same minimum in its getting started guide. The Minecraft Wiki's server setup tutorial lists the same thresholds, and Updating Your Minecraft Server covers moving a live server across a Java boundary safely.
The fix is to raise the Java version on the Startup tab, not to downgrade Minecraft. Note that the reverse does not happen: newer Java runs older Minecraft happily, so there is no such thing as being "too new" for this error.
Plugins and mods hit this too
The class name at the front of the message tells you who compiled too new.
net/minecraft/bundler/Mainon a vanilla jar, ororg/bukkit/craftbukkit/Mainon Paper, is the server itself. Anything else —com/example/someplugin/Main— is a plugin or mod built for a newer Java than your server runs, and the fix is a build of that plugin for your version rather than a change on the Startup tab.
OutOfMemoryError
[Server thread/ERROR]: Encountered an unexpected exception
java.lang.OutOfMemoryError: Java heap space The JVM ran out of heap. Three variants mean slightly different things:
| Message | Meaning |
|---|---|
java.lang.OutOfMemoryError: Java heap space |
The normal one. The heap is too small for the workload |
java.lang.OutOfMemoryError: GC overhead limit exceeded |
The heap is technically not full, but garbage collection is running constantly and achieving nothing. Same fix |
java.lang.OutOfMemoryError: unable to create native thread |
Not heap at all — the process hit a limit outside the heap. Thread stacks, metaspace and direct byte buffers share the container's memory with the heap, and something has exhausted that margin |
You are genuinely out of memory in all three cases, but the remedy on a GameServerKings server is not the one most guides give. There is no Xmx field on the Startup tab to raise or lower — your server launches with -XX:MaxRAMPercentage=95.0, so the heap is already 95% of the RAM your plan provides, and the remaining 5% is the off-heap margin the third message is complaining about. That leaves two real levers:
- Give the server less to hold. Lower
view-distanceandsimulation-distanceinserver.properties, cull accumulated entities, and drop plugins or mods you are not using. Each of those shrinks the live set the heap has to keep. - Move to a larger plan. The heap ceiling is defined as a percentage of your allocation, so a bigger allocation is the only way to raise it.
For the third message specifically, also look for a plugin spawning threads without limit — it is the one OOM variant that is often a single misbehaving add-on rather than a sizing problem. Minecraft Server RAM and JVM Flags explains how the heap figure is arrived at, and Minecraft "java.lang.OutOfMemoryError: Java heap space" works through all the message variants and the causes in the order worth checking.
A crash is not the only symptom. A server running slowly out of memory lags heavily and logs repeated GC pauses long before it finally dies, so an OOM crash after hours of complaints is normal.
Failed to load datapacks
[Server thread/WARN]: Failed to load datapacks, can't proceed with server load. You can either fix your datapacks or reset to vanilla with --safeMode A datapack in world/datapacks/ is malformed, or was built for a different pack format than your Minecraft version uses. Remove the pack you added most recently and restart. Note that this line is logged as a warning, not an error, despite being fatal — do not filter it out.
The other half of this failure is a pack the world expects that is no longer installed, which logs Missing data pack <name>; that one, and the whole family of world content whose mod has been removed, is covered in Minecraft "Missing Mods in World".
Failed to load world data and Chunk Corruption
The blunt one, which stops the boot outright:
[Server thread/ERROR]: Failed to load world data. World files may be corrupted. Shutting down. The subtler ones appear during play, chunk by chunk, and are worth catching early:
| Message | Meaning |
|---|---|
Chunk file at [12, -7] is missing level data, skipping |
That chunk's data is unreadable and will be regenerated empty |
Region file .../r.0.-1.mca has truncated header: 3072 |
The region file was cut short — usually an unclean shutdown mid-write |
Chunk [21, 7] stream is truncated: expected 4096 but read 1832 |
Same, at chunk granularity |
Chunk file at [5, 9] is in the wrong location; relocating. (Expected ..., got ...) |
Region files were shuffled between folders. The server repairs this itself |
Failed to read chunk [x, z] |
Generic read failure; check the accompanying stack trace |
Genuine corruption is usually caused by a hard kill during a save, or by running out of disk. Restore from a backup — How to create a backup — rather than trying to repair region files by hand. sync-chunk-writes defaults to true precisely to prevent this class of damage, and is not something to switch off casually; Minecraft World Management covers world files in depth.
One special case is worth its own line, because it is not corruption at all:
java.lang.RuntimeException: Server attempted to load chunk saved with newer version of minecraft! 3955 > 3465 That is a downgrade. The world was opened by a newer Minecraft version than the server is now running, and the two numbers are world data versions, not Minecraft versions — 26.2 writes 4903. Minecraft does not support downgrading a world. Put the server back on the version that wrote it, or restore a backup taken before the upgrade; Updating Your Minecraft Server covers doing this in the right order, and How to Run a Minecraft Snapshot Server covers the version of this trap you walk into deliberately.
Mixin Failures
Mixin is the bytecode-patching library that Fabric mods and many NeoForge mods use to modify the game. When two mods patch the same method incompatibly, or a mod was built for a different Minecraft version, Mixin refuses:
Mixin [examplemod.mixins.json:MinecraftServerMixin] from phase [DEFAULT] in config [examplemod.mixins.json] FAILED during APPLY
org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @Inject annotation on init could not find any targets matching 'tickServer' in net.minecraft.server.MinecraftServer The pieces to read:
- The config name —
examplemod.mixins.json— names the mod. That is your culprit, every time. On NeoForge the loader logsFailed to apply mixin. Mixin Class: <class>, ModID: <modid>alongside it, naming the mod ID directly. could not find any targets matchingmeans the mod is patching a method that does not exist in this Minecraft version. It is built for a different version. Update it, or move the server back.failed injection checkin the same family means the mod found fewer injection points than it required — usually another mod got there first.Mixin config X requires mixin subsystem version Y but Z was foundmeans your loader is older than the mod expects. Update Fabric Loader or NeoForge.
Related failure types logged the same way are InvalidMixinException, MixinApplyError and MixinPrepareError; the diagnosis is identical — find the config name, find the mod.
Missing Dependencies
Fabric refuses to launch on an unsatisfied dependency and tells you exactly what to install:
Incompatible mods found!
- mod 'Example Mod' (examplemod) 3.2.0 requires any version of fabric-api, which is missing!
A potential solution has been determined, this may resolve your problem:
- Install Fabric API, any version. requires ... which is missing! means install it. requires ... but only the wrong version is present means update it. Fabric prints the suggested fix under A potential solution has been determined — follow it literally.
The plugin equivalent on Paper and Spigot is shorter but means the same thing:
[Server thread/ERROR]: Could not load 'ExamplePlugin.jar' in folder 'plugins'
org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [Vault]. Please download and install these plugins to run 'ExamplePlugin'. The message names both the missing plugin and the one that wanted it. The common shared dependencies are Vault, ProtocolLib and PlaceholderAPI. See How to install plugins for Minecraft Java Edition.
A plugin that is present but built for the wrong Minecraft version fails differently again — Unsupported API version, Plugin API version … is lower than the minimum allowed version, or Error occurred while enabling … (Is it up to date?). Minecraft "Plugin Not Compatible With This Version" works through each of them.
The client-side counterpart of this — the server starts perfectly but rejects modded clients at the handshake — produces Connection closed - mismatched mod channel list on Forge and a named-mod table on NeoForge. That one is covered in Minecraft "Connection closed - mismatched mod channel list".
Paper has one more of its own worth recognising, because the message is unusually clear about what to do:
[SimpleProviderStorage] Circular plugin loading detected!
[SimpleProviderStorage] Circular load order: PluginA -> PluginB -> PluginC -> PluginA Two or more plugins declare each other as dependencies. Update the plugins named in that loop.
Crashes After the Server Is Running
The Watchdog
If a single tick takes longer than max-tick-time — 60,000 ms by default — the server assumes it has hung and kills itself:
[Server Watchdog/ERROR]: A single server tick took 60.00 seconds (should be max 0.05)
[Server Watchdog/ERROR]: Considering it to be crashed, server will forcibly shutdown. Paper's watchdog trips much earlier and prints a thread dump instead of a crash, with a banner designed to stop people filing bug reports:
[Paper Watchdog Thread/ERROR]: --- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---
[Paper Watchdog Thread/ERROR]: The server has not responded for 10 seconds! Creating thread dump
[Paper Watchdog Thread/ERROR]: Server thread dump (Look for plugins here before reporting to Paper!): A watchdog event is a lag diagnosis, not a crash diagnosis. Read the thread dump that follows it: the frames show where the main thread was stuck when it stopped responding, and that is your actual problem — a plugin doing something slow, a runaway machine in an automation modpack, or a chunk-generation storm. Diagnosing Minecraft Server Lag takes it from there, and Minecraft "Can't keep up! Is the server overloaded?" covers the warning that usually precedes a watchdog kill — including why Paper never prints it.
Do not "fix" the watchdog by disabling it
Setting
max-tick-time=-1turns the watchdog off entirely. It stops the restarts; it does not stop the freezes, and it removes the thread dump that tells you what caused them. Treat it as a last resort while you investigate, not as a solution.
Everything Else
Exception in server tick loop, Exception ticking world and Uncaught exception in server thread all produce a crash report. Read it exactly as above: Description: for the phase, then the first non-vanilla package in the trace. A watchdog kill writes one too, with Description: Watching Server.
Bisection: Finding a Bad Mod or Plugin When the Log Does Not Name One
Sometimes nothing is named — the server dies without a useful trace, or the trace points only at vanilla code. Binary search finds the culprit in a handful of restarts instead of dozens. This is the method PaperMC recommends, and it works identically for mods/.
First, confirm it is a mod or plugin at all. Rename the whole folder — plugins to plugins-disabled, or mods to mods-disabled — and start. If the server comes up, you have your answer. If it does not, stop here: the problem is the server itself, its Java version, or the world.
Then halve it. With 32 plugins, five restarts is enough:
| Round | Enabled | Result | Suspect pool |
|---|---|---|---|
| 1 | 16 of 32 | Breaks | Those 16 |
| 2 | 8 of 16 | Fine | The other 8 |
| 3 | 4 of 8 | Breaks | Those 4 |
| 4 | 2 of 4 | Breaks | Those 2 |
| 5 | 1 of 2 | Fine | The other one — found it |
To disable a jar without deleting it, rename Example.jar to Example.jar-disabled, or move it to a temporary folder outside plugins/. The server ignores anything that is not a .jar.
Three things that make bisection go wrong:
- Keep dependency chains together. Moving Vault out while leaving three plugins that need it produces a new, unrelated failure and wastes a round.
- Change one thing per restart. If you also edit a config, you no longer know which change mattered.
- Take a backup first. A plugin that stores data may not like being removed and re-added.
Before you start, do the cheap check: make sure every plugin and mod is on a build made for your Minecraft version. Immediately after a version bump, "everything broke" is almost always a stack of plugins that have not been updated yet, not one bad actor.
What to Capture Before Asking for Help
Send these five and you skip a round trip. Send a screenshot of a screenshot and you will not.
logs/latest.logfrom the failed run, as a file — not a screenshot, and not the last twenty lines. Upload it to a paste service and send the link if it is large.- The crash report, if
crash-reports/gained a file. - Your server type and version — vanilla, Paper, Purpur, Fabric, Forge or NeoForge, plus the Minecraft version and the Java version on the Startup tab.
- What changed. A mod added, a plugin updated, a version bumped, a config edited. "Nothing" is almost never true; a plugin auto-updater counts.
- When it last worked, and whether it fails on every start or only sometimes.
Do not restart repeatedly before collecting the log
Every restart rotates
latest.loginto a.gzand starts a fresh one. Three hopeful restarts can push the useful log two files back. Copy it out first, then experiment.
What to Read Next
The six named-error pages indexed at the top:
- Minecraft "Error: Unable to access jarfile" — the jar the launcher could not open
- Minecraft "Failed to Bind to Port" — the port the server could not take
- Minecraft "java.lang.OutOfMemoryError: Java heap space" — the heap, every message variant, and what to change here
- Minecraft "Can't keep up! Is the server overloaded?" — why it is a symptom, and what to measure instead
- Minecraft "Failed to verify username!" — what the server actually asks Mojang
- Minecraft "Connection closed - mismatched mod channel list" — channel lists, not mod lists
And the wider guides:
- Minecraft Server Won't Start — symptom-first triage, for when you do not have an error message yet
- Fixing YAML and JSON Config Errors on a Minecraft Server — when the message names a config file, a line and a column instead of a class
- Minecraft Players Can't Connect — for a server that starts fine but rejects joins
- Diagnosing Minecraft Server Lag — when the watchdog is firing but nothing crashes
- Minecraft Server RAM and JVM Flags — heap sizing, and why more is not always better
- Updating Your Minecraft Server — Java requirements, world data versions and safe upgrades
- Minecraft server.properties: The Complete Reference — every key named on this page
- Minecraft World Management — world files, backups of the world folder, and resets
- How to create a backup — take one before every bisection round
- How to upload files via SFTP — for pulling logs and crash reports off the server
Made with 💜 by GameServerKings

Need a Minecraft server?
Deploy an instantly-provisioned Minecraft server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $4.80 /month