Add 5 second short dumps to watchdog (#1314)
This commit is contained in:
parent
e861035fc4
commit
b369e70970
2 changed files with 88 additions and 0 deletions
|
@ -36,4 +36,5 @@ stonar96 <minecraft.stonar96@gmail.com>
|
||||||
Hugo Manrique <hugmanrique@gmail.com>
|
Hugo Manrique <hugmanrique@gmail.com>
|
||||||
Andrew Steinborn <git@steinborn.me>
|
Andrew Steinborn <git@steinborn.me>
|
||||||
willies952002 <admin@domnian.com>
|
willies952002 <admin@domnian.com>
|
||||||
|
MicleBrick <miclebrick@outlook.com>
|
||||||
```
|
```
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
From a30613e82fe3e0e0759e03c7d6b4b69d60e005f0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: miclebrick <miclebrick@outlook.com>
|
||||||
|
Date: Wed, 8 Aug 2018 15:30:52 -0400
|
||||||
|
Subject: [PATCH] Add 5 second short dumps to watchdog
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
|
||||||
|
index 57a4748a3..815c3e664 100644
|
||||||
|
--- a/src/main/java/org/spigotmc/WatchdogThread.java
|
||||||
|
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
|
||||||
|
@@ -13,8 +13,10 @@ public class WatchdogThread extends Thread
|
||||||
|
|
||||||
|
private static WatchdogThread instance;
|
||||||
|
private final long timeoutTime;
|
||||||
|
+ private final long shortTimeout; // Paper - Timeout time for just printing a dump but not restarting
|
||||||
|
private final boolean restart;
|
||||||
|
private volatile long lastTick;
|
||||||
|
+ private long lastShortDump; // Paper - Keep track of short dump times to avoid spamming console with short dumps
|
||||||
|
private volatile boolean stopping;
|
||||||
|
|
||||||
|
private WatchdogThread(long timeoutTime, boolean restart)
|
||||||
|
@@ -22,6 +24,7 @@ public class WatchdogThread extends Thread
|
||||||
|
super( "Paper Watchdog Thread" );
|
||||||
|
this.timeoutTime = timeoutTime;
|
||||||
|
this.restart = restart;
|
||||||
|
+ shortTimeout = Math.min(5000, timeoutTime); // Paper - Make short timeout the lower of 5 seconds, and timeout time
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void doStart(int timeoutTime, boolean restart)
|
||||||
|
@@ -52,9 +55,19 @@ public class WatchdogThread extends Thread
|
||||||
|
while ( !stopping )
|
||||||
|
{
|
||||||
|
//
|
||||||
|
- if ( lastTick != 0 && System.currentTimeMillis() > lastTick + timeoutTime && !Boolean.getBoolean("disable.watchdog")) // Paper - Add property to disable
|
||||||
|
+ long currentTime = System.currentTimeMillis(); // Paper - do we REALLY need to call this method multiple times?
|
||||||
|
+ if ( lastTick != 0 && currentTime > lastTick + shortTimeout && !Boolean.getBoolean("disable.watchdog") ) // Paper - Add property to disable and short timeout
|
||||||
|
{
|
||||||
|
+ // Paper start
|
||||||
|
+ boolean isLongTimeout = currentTime > lastTick + timeoutTime;
|
||||||
|
+ // Don't spam short dumps
|
||||||
|
+ if ( !isLongTimeout && currentTime < lastShortDump + shortTimeout ) continue;
|
||||||
|
+ lastShortDump = currentTime;
|
||||||
|
+ // Paper end
|
||||||
|
Logger log = Bukkit.getServer().getLogger();
|
||||||
|
+ // Paper start - Different message when it's a short timeout
|
||||||
|
+ if ( isLongTimeout )
|
||||||
|
+ {
|
||||||
|
log.log( Level.SEVERE, "The server has stopped responding!" );
|
||||||
|
log.log( Level.SEVERE, "Please report this to https://github.com/PaperMC/Paper/issues" );
|
||||||
|
log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" );
|
||||||
|
@@ -79,11 +92,19 @@ public class WatchdogThread extends Thread
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Paper end
|
||||||
|
+ } else
|
||||||
|
+ {
|
||||||
|
+ log.log( Level.SEVERE, "The server has not responded for " + shortTimeout / 1000 + " seconds! Creating thread dump");
|
||||||
|
+ }
|
||||||
|
+ // Paper end - Different message for short timeout
|
||||||
|
log.log( Level.SEVERE, "------------------------------" );
|
||||||
|
log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" );
|
||||||
|
dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE ), log );
|
||||||
|
log.log( Level.SEVERE, "------------------------------" );
|
||||||
|
//
|
||||||
|
+ // Paper start - Only print full dump on long timeouts
|
||||||
|
+ if ( isLongTimeout )
|
||||||
|
+ {
|
||||||
|
log.log( Level.SEVERE, "Entire Thread Dump:" );
|
||||||
|
ThreadInfo[] threads = ManagementFactory.getThreadMXBean().dumpAllThreads( true, true );
|
||||||
|
for ( ThreadInfo thread : threads )
|
||||||
|
@@ -97,11 +118,12 @@ public class WatchdogThread extends Thread
|
||||||
|
RestartCommand.restart();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
+ } // Paper end
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
- sleep( 10000 );
|
||||||
|
+ sleep( 1000 ); // Paper - Reduce check time to every second instead of every ten seconds, more consistent and allows for short timeout
|
||||||
|
} catch ( InterruptedException ex )
|
||||||
|
{
|
||||||
|
interrupt();
|
||||||
|
--
|
||||||
|
2.18.0
|
||||||
|
|
Loading…
Reference in a new issue