Advanced Checklist
This section covers plugins that you can modify/replace to improve performance. Only recommended at higher player counts.
Reading Spark Reports
Section titled “Reading Spark Reports”The most important part of optimisation is to be able to read performance reports. Spark is recommended for this purpose. Some useful flags within Spark are given below:
| Flag | Summary |
|---|---|
--only-ticks-over | Only records samples from ticks that took longer than x milliseconds. Useful for diagnosing the cause of tick spikes. |
--thread * | Records every thread that is being used by the server instance, including plugins. You can use this to figure out the cause of high CPU usage. |
--timeout | Automatically stop and upload the spark report after x seconds. |
--interval | Change the rate of sampling (default = 4ms) |
Although TAB is already well-optimised, there are still some modifications you can make to improve it’s performance and reduce load on the CPU.
FancyHolograms (or other Hologram Plugins)
Section titled “FancyHolograms (or other Hologram Plugins)”Ensure that your holograms are being refreshed at a reasonable interval. updateTextInterval in FancyHolograms is measured in ticks, so setting it to any value below 1000 will cause excessive load on the CPU.
For Leaderboards, we recommend setting it to at least 30000. For static holograms, -1 will result in no updates.
FancyGlow
Section titled “FancyGlow”If you happen to be using FancyGlow, make sure to disable it’s TAB integration since it sends an obscene amount of packets.
Instead, use %fancyglow_color% within TAB’s groups.yml in tagprefix. For example:
_DEFAULT_: tabprefix: "%luckperms-prefix%" tagprefix: "%luckperms-prefix%%fancyglow_color%"ProtocolLib & it’s Dependants
Section titled “ProtocolLib & it’s Dependants”ProtocolLib is not very well optimised. Lots of plugins also abuse ProtocolLib a lot, causing even worse performance. Examples are DeluxeCombat (If ProtocolLib hook is enabled) and InteractiveChat. Removal has resulted in significantly better performance in all large servers.
Consider finding alternatives to plugins that use ProtocolLib, or fork them to use PacketEvents.
Citizens
Section titled “Citizens”Although Citizens is supported by a wide variety of plugins, it is also notorious for it’s poor performance. IT is recommended that you use either FancyNPCs or ZNPCs+ for your server if possible. Both plugins have almost no impact on the Server Thread.
ajLeaderboards
Section titled “ajLeaderboards”ajLeaderboards is famous for causing crashes thanks to it’s generation of thousands of threads (over 50k!) We recommend using an alternative such as Topper.
AntiCheat
Section titled “AntiCheat”Vulcan as an anti-cheat does not scale well at higher player counts, where every bit of performance matters. >1.6% ticks eaten at 350+ players is supoptimal. These days, the only anti-cheat we can truly recommend is Grim, which unfortunately doesn’t have the best checks.
AntiCheats such as Polar haven’t seen particularly wide-scale adoption, so we cannot say anything regarding those. View our Anti-Cheats page below for more information.
WorldEdit / FastAsyncWorldEdit / WorldGuard
Section titled “WorldEdit / FastAsyncWorldEdit / WorldGuard”If you’re using FAWE or WorldEdit, we suggest forking it to unregister any useless events (located within the WorldEditListener class.) On idle, these events are the primary culprit of high server thread usage in FAWE/WE.
As for WorldGuard, we suggest using FreshSMP’s WG fork. Do note that it is version-specific, so you might have to compile an older commit if you’re running an older version. Alongside using the fork, you may also disable listening to specific events and disable high-frequency-events within WorldGuard’s config. If you have worlds without any regions, WorldGuard also allows you to disabl elisteners in those worlds by setting regions.enabled: false within that world’s config.
Vanish Plugins
Section titled “Vanish Plugins”We recommend using AdvancedVanish instead of plugins such as SuperVanish or PremiumVanish which often rely on ProtocolLib.
EssentialsX
Section titled “EssentialsX”EssentialsX has a plethora of issues including laggy tabcompletion and an improper caching system. We suggest creating a fork that disables/optimises it’s tabcompletion features until it’s officially fixed.
You should consider using/forking the FreshSMP fork, which is linked below. Although it has a few optimisations, it does not disable the tabcompletion system.
Geyser
Section titled “Geyser”To offload Geyser’s performance impact on your Spigot/Proxy server, you can use Geyser Standalone. Worth it for servers that have a lot of bedrock players.
DiscordSRV
Section titled “DiscordSRV”If you are fine with losing a few features, consider replacing DiscordSRV with Essentials Discord as it isn’t as bloated.
Auction House Plugins
Section titled “Auction House Plugins”AxAuctions is thus far the most stable and performant Auction House plugin we’ve tried. PlayerAuctions is an acceptable alternative if you want a free plugin, but it’s performance is marginally inferior.
Stacking Plugins
Section titled “Stacking Plugins”Stacking plugins can be very detrimental to server performance depending on their implementations and configurations. RoseStacker is the best we’ve used thus far, but might end up lagging the server a bit more than if you didn’t have it installed depending on how you configure it.