Skip to content

Advanced Checklist

This section covers plugins that you can modify/replace to improve performance. Only recommended at higher player counts.

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:

FlagSummary
--only-ticks-overOnly 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.
--timeoutAutomatically stop and upload the spark report after x seconds.
--intervalChange 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.


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 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.


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 is famous for causing crashes thanks to it’s generation of thousands of threads (over 50k!) We recommend using an alternative such as Topper.


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.


We recommend using AdvancedVanish instead of plugins such as SuperVanish or PremiumVanish which often rely on ProtocolLib.


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.


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.


If you are fine with losing a few features, consider replacing DiscordSRV with Essentials Discord as it isn’t as bloated.


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 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.