From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 4 May 2020 01:08:56 -0400 Subject: [PATCH] Set cap on JDK per-thread native byte buffer cache See: https://www.evanjones.ca/java-bytebuffer-leak.html This is potentially a source of lots of native memory usage. We are clearly seeing native usage upwards to 1-4GB which doesn't make sense. Region File usage fixed in previous patch should of tecnically only been somewhat temporary until GC finally gets it some time later, but between all the various plugins doing IO on various threads, this hidden detail of the JDK could be keeping long lived large direct buffers in cache. Set system properly at server startup if not set already to help protect from this. diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java index bec85212b48f8ae0c89aef01c3cd245ae0c282fc..334743a8c82bbcb2f09d0919fc9597750a25b8dd 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -26,6 +26,7 @@ public class Main { } // Paper end // Todo: Installation script + if (System.getProperty("jdk.nio.maxCachedBufferSize") == null) System.setProperty("jdk.nio.maxCachedBufferSize", "262144"); // Paper - cap per-thread NIO cache size OptionParser parser = new OptionParser() { { this.acceptsAll(Main.asList("?", "help"), "Show the help");