DGuard

Server crashing or won't start: reading logs and crash reports

The cause of almost any server crash is written in logs/latest.log or in the crash-reports folder. What's left is finding the first error rather than the last, working out whose code it is — the server's, a plugin's or Java's — and matching it to the typical cases below.

The DGuard team5 min read

In short: open logs/latest.log and find the first line with ERROR or Exception — the rest is usually its fallout. If the server hung and the watchdog stopped it, the cause is in the thread dump next to the hang message. If Java itself crashed, look for an hs_err_pid<number>.log file in the folder the server was started from.

Where the logs are

WhatWhereWhen to look
This run's loglogs/latest.logAlways first: startup, plugin errors, hangs
Earlier runslogs/<date>-<number>.log.gzWhen the server has restarted since and latest.log was overwritten
Crash reportscrash-reports/The server failed with an exception and wrote a report itself
A crash of Java itselfhs_err_pid<number>.log in the working folderThe process vanished without a Minecraft report
Service eventsjournalctl -u minecraft (systemd), docker compose logs (Docker)The server won't start or the OS killed it

Paper's docs say to start any diagnosis with latest.log: many problems show up right there. If the OS killed the process for lack of memory, the Minecraft log just stops — look for the OOM killer message in the system journal.

How to read an error

  1. 1

    Find the first error

    Errors come in chains: one causes the next. Read the log top to bottom from the moment things went wrong.

  2. 2

    Read the exception's headline

    A line like java.lang.NullPointerException: ... or Caused by: ... says what happened. The last Caused by is usually closest to the root cause.

  3. 3

    Find whose code it is

    Look for package names in the stack trace: com.example.myplugin is a plugin, net.minecraft and io.papermc are the server. If a plugin is in the trace, start by updating it or taking it out for a while.

  4. 4

    Check whether it repeats

    An error on every start is a conflict or a version issue. An error at one moment is a mechanic, a farm or a player's action.

Typical errors

In the logWhat it meansWhat to do
UnsupportedClassVersionError ... class file version 69.0The build needs Java 25 but an older one is running (65 is Java 21)Install the right Java: 25 for Paper 26.x, 21 for 1.21.x
Failed to bind to port / Address already in useThe port is taken: the server is already running or server-ip is wrongFind the second java process; leave server-ip empty
You need to agree to the EULAThe EULA isn't acceptedeula=true in eula.txt
Could not load 'plugins/...jar' + Unknown dependencyThe plugin needs a dependency that's missingInstall the dependency named in the plugin's description
Invalid plugin.ymlA mod or a broken file is in plugins/Download the plugin again; Fabric/Forge mods don't run on Paper
Ambiguous plugin nameTwo versions of the same pluginDelete the old one
java.lang.OutOfMemoryErrorThe Java heap ran outSee how much RAM a server needs and find the culprit with spark
Can't keep up! Is the server overloaded?Ticks don't fit into 50 msProfile with spark — see why is my server lagging
From Paper's docs (Basic troubleshooting, Adding plugins) and the Java class file specification

Hangs and the watchdog

If a tick never finishes, the server considers itself hung. On Paper the early warning comes first: after 10 seconds of hanging it prints a thread dump to the log and repeats it every 5 seconds (the watchdog section in paper-global.yml). After 60 seconds (timeout-time in spigot.yml) the watchdog stops the server and, with restart-on-crash: true, calls the script from restart-script.

The thread dump is the key evidence: the main thread's (Server thread) stack shows what it got stuck on — a plugin, a chunk load or an entity. If hangs repeat, take a profile with /spark profiler start --only-ticks-over 100: spark records only the heavy ticks.

Finding the plugin at fault

  1. 1Update the server and plugins to their latest builds — most often the error is already fixed.
  2. 2If the stack trace points at a plugin, take it out of plugins/ for a while and test.
  3. 3If it doesn't, take out half the plugins, test, then half of the rest. That finds the culprit in a few restarts.
  4. 4Test on a copy of the server, not the live one: see server backups.

An anticheat is a plugin too. DGuard — the best anticheat for a modern Minecraft server — prints clear messages about its license and PacketEvents at startup, and /dguard license shows the license state and the PacketEvents version. Common install problems and their fixes are on the install page.

FAQ

Where is the Minecraft server log?

In the logs folder next to the server: latest.log is the current run, the .log.gz archives are earlier ones. Crash reports are in the crash-reports folder.

What does UnsupportedClassVersionError mean?

The build was compiled for a newer Java. Class file version 69 is Java 25, 65 is Java 21. Install the Java your Paper version requires.

Why does the server say "Can't keep up"?

The server can't fit a tick into 50 ms. Find the cause with the spark profiler: usually entities, farms, chunk generation or a plugin.

The server crashes without an error — what now?

Check the system journal: the OOM killer may have killed the process for lack of memory. If Java itself crashed, there'll be an hs_err_pid<number>.log file in the working folder.

Sources

All sections

Run the best anticheat for modern Minecraft

DGuard catches all 47 kinds of cheats in our comparison — the closest rival, Intave, has 27. Full protection on every plan, free up to 30 players online.