{"id":25008,"date":"2026-10-18T13:01:30","date_gmt":"2026-10-18T13:01:30","guid":{"rendered":"https:\/\/atalnetworks.com\/?p=25008"},"modified":"2026-10-18T13:02:08","modified_gmt":"2026-10-18T13:02:08","slug":"minecraft-low-tps-troubleshooting","status":"publish","type":"post","link":"https:\/\/atalnetworks.com\/fr\/minecraft-low-tps-troubleshooting\/","title":{"rendered":"Fix Low Minecraft TPS with CPU, Chunk, and Plugin Checks"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">To fix low Minecraft TPS, measure tick duration during the slowdown, capture a spark profile, and identify the work delaying ticks. Check plugin tasks, entities, chunk activity, and CPU availability. Test one change on a recoverable copy, repeat the same workload, and confirm that gameplay and saving still work.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Start with your server build, Java version, player activity, recent changes, and the time of each incident. These details help separate a busy farm from a plugin fault, memory pressure, or a host resource limit.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This Minecraft low TPS troubleshooting guide focuses on Java Edition running Paper. We use a repeatable process: measure the problem, isolate its cause, check the result, and keep a working recovery path.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Distinguish TPS from Network Lag<\/span><\/h2>\n<p><b>TPS means ticks per second.<\/b><span style=\"font-weight: 400;\"> It measures how often the server advances its game simulation. Minecraft normally targets 20 TPS, which gives the server an average processing budget of 50 milliseconds per tick.<\/span><\/p>\n<p><b>MSPT means milliseconds per tick.<\/b><span style=\"font-weight: 400;\"> A tick that finishes in 20 milliseconds leaves time before the next scheduled tick. It does not need to consume the full 50 milliseconds. Sustained processing above that budget reduces the achievable tick rate.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">TPS alone can hide short freezes. Check median, 95th-percentile, and maximum tick duration over the incident window. The 95th percentile shows the value at or below which 95% of recorded tick durations fall. A maximum identifies the slowest recorded tick, but does not show how often that delay occurred. See the <\/span><a href=\"https:\/\/spark.lucko.me\/docs\/guides\/TPS-and-MSPT\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Spark explanation of TPS and MSPT<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<table>\n<thead>\n<tr>\n<th><b>Symptom<\/b><\/th>\n<th><b>First check<\/b><\/th>\n<th><b>What to investigate<\/b><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">Mobs, block actions, and farms slow down<\/span><\/td>\n<td><span style=\"font-weight: 400;\">TPS and tick duration during the event<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Work delaying the server tick<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Short freezes with normal average TPS<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Slow-tick samples and timestamps<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Brief processing or pause events<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Actions arrive late while tick metrics stay normal<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Player latency and packet loss<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Network route, server connection, or client connection<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">One player sees choppy movement<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Client FPS and render load<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Local graphics or client performance<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Terrain arrives slowly during travel<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Chunk activity and network conditions<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Generation, loading, delivery, or queues<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Ping measures connection delay. FPS measures client rendering speed. Neither is a substitute for server tick measurements.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The number of affected players is a clue, not proof. One player can trigger expensive work in a particular area. A shared network problem can affect several players while the tick loop remains healthy.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Prerequisites and Supported Versions<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Use a supported Paper release and the Java runtime required for that release. At the documentation check for this draft, Paper lists Java 25 for 26.1 and newer. Confirm the requirement for your exact build in <\/span><a href=\"https:\/\/docs.papermc.io\/paper\/getting-started\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Paper&#8217;s setup documentation<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Paper includes spark from version 1.21 onward. Its documentation favors spark over the older Timings workflow. Check the startup log before installing a second copy. Commands and settings here should not be applied unchanged to Bedrock, Folia, or modded server platforms. See <\/span><a href=\"https:\/\/docs.papermc.io\/paper\/profiling\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Paper&#8217;s profiling guidance<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Before testing, prepare:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Console access or the required spark permissions.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A stopped-server backup and a separate test instance.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Matching world files, plugin data, and configuration.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Enough storage for the backup, test world, and reports.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A record of CPU allocation, memory limits, software versions, and test date.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Keep the test instance disconnected from production databases, payment systems, and webhooks. Use a separate port and restricted access. Check that the backup restores before changing the test copy.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you still need the operating-system setup, use our <\/span><a href=\"https:\/\/atalnetworks.com\/fr\/minecraft-java-server-on-a-linux-vps-setup-guide\/\"><span style=\"font-weight: 400;\">Minecraft Java server on a Linux VPS guide<\/span><\/a><span style=\"font-weight: 400;\">. That installation guide covers a separate task; it does not replace Paper-specific checks.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Profile Slow Ticks<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Capture the problem while players perform the activity that causes it. An empty server after a restart can produce a clean report that says little about peak-hour lag.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Write down the incident time, player count, affected world, and activity. Note whether the slowdown started after a plugin update, during exploration, near a farm, or alongside a backup.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Configuration and Expected Output<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Enter these commands in the <\/span><b>Minecraft server console<\/b><span style=\"font-weight: 400;\">. In game, add a leading slash and use an account with the required permission. Do not paste them into a Linux shell.<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">spark tps<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">spark health show<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">spark profiler start &#8211;timeout 600<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The first command reports tick metrics. The second prints a health summary. The third starts a ten-minute profile and returns a report link when it finishes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If a profiler is already active, check its status before starting another capture:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">spark profiler info<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To end an active capture early:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">spark profiler stop<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">For a separate capture of severe spikes, use:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">spark profiler start &#8211;only-ticks-over 100 &#8211;timeout 300<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This records samples from ticks above 100 milliseconds for five minutes. It excludes smaller delays, so retain a normal capture too. The threshold is a diagnostic filter, not a health target.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If a command fails, check permissions and the installed version against the <\/span><a href=\"https:\/\/spark.lucko.me\/docs\/Command-Usage\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">spark command reference<\/span><\/a><span style=\"font-weight: 400;\">. Keep report access restricted until you have checked its contents for sensitive details.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Read the Profile Before Choosing a Fix<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Start with the incident window, then inspect the relevant server thread and expand the costly call paths. The viewer helps show where sampled execution time was spent. Follow the caller chain before assigning blame to a plugin or game system. See <\/span><a href=\"https:\/\/spark.lucko.me\/docs\/Using-the-viewer\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Spark&#8217;s viewer guide<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A plugin name in a large branch is a lead. It can call expensive game operations, wait for another service, or share a parent method with unrelated work. Test the suspected behavior before deciding that removal is the answer.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Keep an annotated copy of the baseline report. Mark the incident window, tick-duration readings, and suspected call path. Save the accompanying activity notes so another administrator can repeat the test.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Isolate Plugins, Entities, and Chunk Generation<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Choose a test from the evidence. Changing several settings at once makes the result harder to explain and the successful change harder to keep.<\/span><\/p>\n<table>\n<thead>\n<tr>\n<th><b>Evidence during the incident<\/b><\/th>\n<th><b>Controlled test<\/b><\/th>\n<th><b>Failure check<\/b><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">A plugin task dominates the relevant path<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Change one feature or compatible plugin version<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Missing dependencies or new errors<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Entity or block-entity work rises<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Pause the identified farm or mechanism<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Broken behavior or lost items<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Spikes occur in new terrain<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Compare controlled exploration conditions<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Different routes or already-generated chunks<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Simulation work is expensive<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Reduce simulation distance for one test<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Farms stop working at the required distance<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Freezes align with memory or storage pressure<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Compare pause records and scheduled jobs<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Treating correlation alone as proof<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span style=\"font-weight: 400;\">Check CPU Availability, Memory Pauses, and Storage Delays<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Low total CPU usage does not prove that the server has spare tick capacity. The main tick thread can limit progress while other cores remain less busy. Minecraft also performs work on other threads, so \u201cMinecraft uses only one core\u201d is too broad.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Check what the hosting panel&#8217;s CPU percentage measures. Ask whether it represents one core, several allocated cores, or the whole host. Record quota limits and any visible throttling. A processor model alone doesn&#8217;t show how much CPU time the instance gets.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For memory, separate Java heap use from total process memory. A high heap reading alone does not prove a leak. Look for pauses that coincide with freezes, repeated collection pressure, swapping, or process-limit failures. Paper discusses these distinctions in its <\/span><a href=\"https:\/\/docs.papermc.io\/paper\/basic-troubleshooting\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">troubleshooting documentation<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Check saves, backups, and other scheduled jobs against incident timestamps. Storage type is only part of the picture. Shared storage contention, queues, or competing jobs can affect the workload. Keep saving enabled while you investigate.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Find a Plugin That Delays Ticks<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Use the test copy for plugin changes:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Reproduce the slowdown and keep the baseline report.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Stop the test server cleanly.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Back up the suspect plugin&#8217;s configuration and data.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Change one feature, or test one compatible plugin update.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Restart and inspect the startup log.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Repeat the same player activity and capture another profile.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">If the suspect is unclear, test dependency-aware plugin groups. Keep required libraries with the plugins that use them. Avoid hot-unloading plugins or using a reload as a substitute for a clean restart.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Reject a result if the server now fails to load permissions, economy services, protection rules, or other required functions. A repair that reduces work due to a broken plugin stack is not successful.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Test Entities, Villagers, Hoppers, and Redstone<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Follow the profile to a specific mechanism or area. Possible workloads include villagers searching for paths, item collections, mob farms, hopper systems, and repeating redstone circuits. Their costs depend on the build and activity, not just the count.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">On the test copy, pause one identified mechanism using its normal controls. Keep player locations and other activity unchanged. Compare the profile with the mechanism active and paused.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Before editing a setting, identify its purpose:<\/span><\/p>\n<table>\n<thead>\n<tr>\n<th><b>Control<\/b><\/th>\n<th><b>What it changes<\/b><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">Spawning limits<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Rules for new natural spawns<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Activation range<\/span><\/td>\n<td><span style=\"font-weight: 400;\">How loaded entities tick outside a range<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Tracking range<\/span><\/td>\n<td><span style=\"font-weight: 400;\">How far entity information is sent to players<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Merge radius<\/span><\/td>\n<td><span style=\"font-weight: 400;\">How nearby items or experience are combined<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Save limits<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Which entities persist through chunk saving and loading<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Paper documents activation ranges and merge radius in <\/span><span style=\"font-weight: 400;\">spigot.yml<\/span><span style=\"font-weight: 400;\"> under world settings. Check the <\/span><a href=\"https:\/\/docs.papermc.io\/paper\/reference\/spigot-configuration\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Spigot configuration reference<\/span><\/a><span style=\"font-weight: 400;\"> for the exact structure.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Paper&#8217;s <\/span><span style=\"font-weight: 400;\">chunks. entity-per-chunk-save-limit<\/span><span style=\"font-weight: 400;\"> is a persistence control. It is not a general live population cap. Changing it can affect which entities survive saving and loading. Check the <\/span><a href=\"https:\/\/docs.papermc.io\/paper\/reference\/world-configuration\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">world configuration reference<\/span><\/a><span style=\"font-weight: 400;\"> before using it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Avoid broad item or entity deletion as the default repair. It can remove player property without proving the cause. Test collection, trading, farm output, and protection behavior after any relevant change.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Separate Chunk Generation, Loading, and Simulation<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">These are different jobs. Generation creates new terrain. Loading brings existing terrain into memory. Simulation advances active game behavior.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the incident occurs during exploration, compare travel through existing terrain with travel through new terrain. Record the route and world snapshot. Repeating yesterday&#8217;s exploration route today also changes the workload because those chunks already exist.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">View distance controls the server&#8217;s chunk view distance; simulation distance controls the reach of simulation around players. Check effective world overrides before editing either setting. Their documented meanings appear in <\/span><a href=\"https:\/\/docs.papermc.io\/paper\/reference\/server-properties\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Paper&#8217;s server.properties reference<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, if the test server currently uses simulation distance 10, a controlled trial could change only that value to 8:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\"># server.properties: example test value<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">simulation-distance=8<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Stop the test server before editing, preserve the original file, and restart afterward. Keep view distance unchanged for this comparison. Confirm the effective setting and test the farms or activities players need at a distance. Eight is an example trial value, not a universal recommendation.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Pre-generation is useful when new terrain generation is the measured cause. For a small test selection with a compatible Chunky installation, explicitly set the world and area:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky world world<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky shape square<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky center 0 0<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky radius 500<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky selection<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">Check the displayed selection and available disk space before starting:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky start<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">Monitor progress and host load. Pause the task if necessary:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"font-weight: 400;\">chunky pause<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This example uses a 500-block radius for a bounded test. It is not a recommended production world size. Generation consumes time and storage; it does not remove future entity or plugin work. Canceling a task does not undo terrain already generated. Use the saved world snapshot for restoration. See the <\/span><a href=\"https:\/\/github.com\/pop4959\/Chunky\/wiki\/Commands\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">official Chunky commands<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Success and Failure Checks<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Keep a change only when the same activity produces a repeatable improvement and required gameplay still works.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Reject the test if player numbers fell, a dependency failed, inventory changed unexpectedly, saving failed, or the problem did not occur during the capture. Restore the baseline before testing another explanation.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Check Improvements Without Masking Errors<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Use the same player count, activity, route, software, capture duration, and warm-up procedure for comparable runs. Keep profiler filters consistent.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For a practical first comparison, repeat each condition three times where feasible. Report variation instead of selecting the best run. Test new terrain from matching starting snapshots so earlier generation does not quietly remove the original workload.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Compare Before-and-After Profiler Captures<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Build a record from actual measurements:<\/span><\/p>\n<table>\n<thead>\n<tr>\n<th><b>Record<\/b><\/th>\n<th><b>Before change<\/b><\/th>\n<th><b>After change<\/b><\/th>\n<th><b>After restoration<\/b><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">Player count and activity<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Baseline<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Matching workload<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Matching workload<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">TPS windows and tick duration<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Measured<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Measured<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Measured<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Suspected call path<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Baseline capture<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Comparison capture<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Recovery capture<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Logs and plugin functions<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Checked<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Checked<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Checked<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Save, restart, and rejoin<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Checked<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Checked<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Checked<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Attach the before-and-after reports with captions that state the exact change and workload. If fewer mobs or a shorter simulation run produced the gain, explain that gameplay tradeoff.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Do not lower the target tick rate, disable the watchdog, stop world saving, or hide warnings to improve the displayed result. These actions can conceal the problem or change what the server is doing.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Rollback and Maintenance<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Stop the test server. Restore the original configuration and compatible plugin files. If the test changed data, restore the matching world and plugin-data backup too. Replacing a JAR alone may not reverse a data migration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Start the restored instance and check the log. Join, inspect inventory, and test the affected mechanism. Make a small recognizable world change, save, restart, and confirm that it remains. This checks recovery beyond a successful startup.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Record the hardware allocation, operating system, Minecraft build, Java runtime, plugin versions, test date, and person responsible for follow-up. Keep the reports and configuration differences beside that record.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Recheck after relevant software updates, new farms, plugin changes, or player growth. Scheduled restarts can serve an operational need, but they do not prove that a recurring performance fault has been fixed.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Common Questions About Low Minecraft TPS<\/span><\/h3>\n<p><b>Why is TPS low when CPU usage looks low?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">The CPU display may average several cores while the tick thread is constrained. CPU quotas, waits, and pauses can also delay progress. Compare the profile with the host&#8217;s resource measurements.<\/span><\/p>\n<p><b>Can a Minecraft server lag at 20 TPS?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Yes. Average TPS can hide brief slow ticks. Chunk delivery, connection delay, or client rendering can also cause poor play. Check the metric that matches the symptom.<\/span><\/p>\n<p><b>Will more RAM fix low TPS?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">It can help when memory pressure causes the delay. It will not remove expensive plugin logic or excessive simulation work. Check pause and memory-limit evidence before changing the allocation.<\/span><\/p>\n<p><b>Which anti-lag plugin should I install first?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Start with measurement. Paper already bundles Spark on supported modern releases. Add a behavior-changing plugin only when it addresses a measured cause and passes your gameplay checks.<\/span><\/p>\n<p><b>Does chunk pre-generation fix every TPS drop?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">No. It moves terrain generation to a planned period. Existing chunks still need loading, and entities, plugins, saves, and simulation still require resources.<\/span><\/p>\n<p><b>What should I send hosting support?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Send the exact software versions, incident timestamps and time zone, workload description, profiler report, recent changes, and relevant logs. Remove secrets before sharing. Include any visible CPU limits or memory failures.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Before applying the tested change to production, confirm that you have captured the incident, checked one cause at a time, compared matching workloads, tested gameplay and saving, proved restoration, and assigned a maintenance owner.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If the evidence points to an infrastructure limit, request a <\/span><a href=\"https:\/\/atalnetworks.com\/fr\/dedicated-game-servers\/\"><span style=\"font-weight: 400;\">dedicated game server configuration review<\/span><\/a><span style=\"font-weight: 400;\"> from Atal Networks. Share your workload, player region, capacity target, profiler evidence, and recovery requirements so the discussion starts with the conditions your server must handle.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>To fix low Minecraft TPS, measure tick duration during the slowdown, capture a spark profile, and identify the work delaying [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":25010,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-25008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-grade-server"],"acf":[],"_links":{"self":[{"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/posts\/25008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/comments?post=25008"}],"version-history":[{"count":1,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/posts\/25008\/revisions"}],"predecessor-version":[{"id":25009,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/posts\/25008\/revisions\/25009"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/media\/25010"}],"wp:attachment":[{"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/media?parent=25008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/categories?post=25008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atalnetworks.com\/fr\/wp-json\/wp\/v2\/tags?post=25008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}