Add a performance mod to address measured server work, then compare the same workload before and after. Installing three recognizable names together makes it difficult to tell which change helped or caused a regression.
This guide assumes a working Minecraft Java dedicated server running Fabric. It does not convert Paper plugins, repair a broken modpack or promise a fixed player capacity. Keep the existing game branch unless a separately planned upgrade requires changing it.
Identify what is actually slow#
Low client FPS, delayed world simulation and a poor connection can feel similar to players but need different evidence. If one player's camera stutters while everyone else plays normally, start with that client's rendering and hardware. A server-side mod does not replace a client rendering optimization such as Sodium.
For simulation, record TPS and MSPT during the problem. At the normal 20-tick target, each tick has a 50 ms budget; averages alone can hide spikes, so include the distribution. Also record process and host memory, swapping, CPU activity and the circumstances: exploring new terrain, running farms or standing in an established base.
Repeated long pauses with host memory exhaustion need a different investigation from sustained expensive entity processing. Similarly, healthy simulation with distant players experiencing delay calls for connection measurements rather than assuming the main tick loop is overloaded.
Match the candidate to that evidence#
| Candidate | Work it targets | What it cannot establish by itself |
|---|---|---|
| Lithium | Game logic, including simulation internals | Every farm, mod interaction or overloaded world becoming cheap |
| FerriteCore | Retained memory used by game data structures | A guaranteed reduction in process RSS or faster ticks |
| Krypton | Networking implementation work, including packet handling and compression | Lower geographical latency or repaired packet loss |
These projects are not interchangeable. FerriteCore's documentation includes client rendering and model optimizations alongside changes relevant on both sides; do not apply a client memory figure to your dedicated server. A lower retained heap can be useful without producing a visible TPS change.
Krypton optimizes processing around Minecraft Java's networking stack. Gameplay uses TCP; installing it is not a reason to open a UDP gameplay port or change forwarding rules. A saturated upstream link, an unstable route and server networking CPU cost remain separate problems.
Lithium can operate on the server without requiring that players install Lithium. Krypton can also be used independently on the server. That does not make the rest of your modpack server-only: gameplay mods may still require matching client components.
Check the exact artifact, not just the project name#
Record Minecraft, Fabric Loader, the Java executable used by the service, existing mod filenames and relevant configuration. Fabric's current Java guidance requires Java 25 for Minecraft 26.1 and later; older branches have their own requirements. A command run in your login shell may use a different Java binary from the actual service.
The project's current release is not automatically your release. On November 4, the maintainers' publishing records contain Minecraft 26.3 artifacts for the three projects, while earlier game branches need their corresponding files. Use the project's version selector rather than upgrading an established world merely to match a download button.
For each candidate, check:
- The exact supported Minecraft version and Fabric release artifact, rather than a NeoForge build.
- Required dependencies and their compatible versions. Fabric API and Fabric Loader are different components; install the API when the selected mod requires it.
- Dedicated-server environment support and release notes for the selected file.
- Known conflicts affecting your actual mod list, including issues fixed in newer compatible releases.
Use maintained releases from the project links. An archive error such as zip END header not found points to a damaged or incorrect file, not proof that changing every loader version will solve it. Replace the affected download from its legitimate release source and recheck the log.
Make one controlled comparison#
Prepare a separate test copy with its own working directory and port. Stop the original cleanly before taking a complete recovery copy of its world, mods, configuration and launcher/version record. Keep the copy protected: a performance test can still write world data.
If you use spark, install its compatible Fabric server mod in the test environment before establishing the baseline. Keep that same profiler present for the comparison. In the server console, these commands report profiler status and start a three-minute capture:
spark profiler info
spark profiler start --timeout 180
Use /spark with the corresponding arguments in game if your account has permission. The capture exposes operational information, so review the report before sharing it publicly. Measure the same approximate players, loaded area, view and simulation distances and activity; terrain generation in one run and an idle base in the other are different workloads.
Stop the test server, add one compatible candidate to mods, then start it and inspect logs/latest.log for startup and mixin errors. Connect with the actual pack, check its important mechanics, save and restart. Repeat the measured activity and compare tick distribution, memory pressure or networking work according to the original symptom. Preserve both reports and exact mod filenames.
Keep the change if it solves the measured problem without a functional regression. If the result is inconclusive, extend a comparable measurement or revert; do not manufacture an improvement from a single quieter interval. Restore the protected test state before investigating a failed candidate.
Keep Java tuning out of the mod comparison#
Changing the collector, heap, Java version and several mods together defeats this process. Start with the supported runtime and a sensible existing launch configuration. -Xmx limits Java heap rather than the whole process; leave host memory for native allocations, the operating system and other services. Copying a large JVM flags block cannot identify the expensive work shown in a profile.
For several hosts, keep their version and resource records together. Nexardo is an option for managing your own infrastructure; compatible mod selection and workload validation still belong in your server's maintenance process.




