ATM10 Server Lag Fix: Complete Optimization Guide 2026

Published on | Updated

Fix 'Can't keep up!' errors in ATM10. Proven solutions: Generational ZGC for Java 21+, watchdog timeout configs, RAM allocation myths debunked, and server.properties tweaks that actually work. Get your modded server from 5 TPS to stable 20 TPS.

all the mods 10 atm10 server optimization lag fix 2026

Quick Fix: If your ATM10 server shows "Can't keep up!" warnings, do this immediately:

  • Switch to Generational ZGC: Swap the pack's G1 flags in user_jvm_args.txt for -XX:+UseZGC -XX:+ZGenerational (requires Java 21+), on a fast CPU with 4+ cores, which is when the ATM guides suggest ZGC
  • Keep the watchdog on: The official ATM10 start script writes max-tick-time=180000 into a new server.properties. Leave it there instead of setting it to -1
  • Size the heap to your plan: The official server files ship with -Xms4G -Xmx8G. Raise -Xmx to fit your plan RAM (12GB for 1-5 players, 16GB for 5-15, 32GB for 15+), but keep it below the plan size, because Java needs memory on top of the heap
  • Pre-generate world: Use NeoForge's built-in /neoforge generate command before players join (the radius is in chunks, so a 5,000-block radius is about 313)

Start with these four, then work through the rest of this guide. Still picking a server? Our ATM10 server hosting plans are sized by player count.


Why All The Mods 10 Destroys Servers

The "Kitchen Sink" Problem

ATM10 is a kitchen sink modpack: it includes around 500 mods covering every conceivable Minecraft feature:

Mod CategoryExample ModsPerformance Impact
TechMekanism, RFToolsHigh (complex tile entities)
MagicArs Nouveau, OccultismMedium (particle effects, rituals)
World GenOh The Biomes We've GoneExtreme (chunk generation lag)
DimensionsAllthemodium (Mining dimension), The Twilight Forest, Deeper and DarkerHigh (separate world loading)
StorageRefined Storage, Applied Energistics 2Medium (network calculations)
AutomationCreate, Integrated DynamicsExtreme (thousands of rotating blocks)

Result: A single player exploring new terrain puts far more load on the CPU than in Vanilla Minecraft, and it adds up fast with several players online.

The Infamous Error Message

[Server thread/WARN]: Can't keep up! Is the server overloaded? 
Running 5283ms or 105 ticks behind

Translation: The server has fallen 5.2 seconds (105 ticks) behind, when each tick should take 50ms. The game is running in slow motion.

What players experience:

  • Mobs teleporting (rubberbanding)
  • Block break delay (hit block, waits 3 seconds to break)
  • Chunk loading lag (falling through unloaded chunks)
  • Crashes during world generation

The RAM Allocation Myth (More Is Not Always Better)

Common Mistake

Reddit advice: "ATM10 needs 32GB RAM minimum!"

Reality: More RAM only helps up to the point where the server has enough. Past that, lag comes from ticks taking longer than 50ms, and a bigger heap does not make a slow tick faster.

What the Pack Ships With

The official ATM10 server files set -Xms4G -Xmx8G in user_jvm_args.txt, together with G1 garbage collector flags. That heap stays at 8GB until you change it, even if your server has more RAM available.

Optimal RAM Allocation for ATM10

Player CountPlan RAMSpace-Node Plan
1-5 players12GBMC Special 1
5-15 players16GBMC Special 3
15+ players32GBMC Special 4

Rule: Pick the RAM for your player count, then raise -Xmx in user_jvm_args.txt to fit it. Keep the heap below your plan size, because Java needs memory on top of the heap. More is not better.


The Solution: Generational ZGC (Java 21+)

What is ZGC?

Z Garbage Collector is a modern GC designed for low-latency applications (like game servers).

Traditional G1GC (Java's default):

GC Cycle: 
1. Stop ALL game threads (Stop-the-World pause)
2. Scan heap for garbage
3. Free memory
4. Resume game threads

Generational ZGC:

GC Cycle:
1. Scan heap WHILE game runs (concurrent)
2. Only pause for under 1ms to swap memory pointers
3. Continue scanning in background

Pause time: under 1ms (players don't notice)

How to Enable Generational ZGC

Step 1: Update to Java 21

ATM10 needs Java 21. The official start script stops if Java is missing or older than 21:

# Check Java version
java -version

# Should show:
# openjdk version "21.0.x"

If you see Java 17 or lower, download Adoptium Temurin JDK 21.

Step 2: Replace the G1 Flags in user_jvm_args.txt

ATM10 does not start from a single server jar. The official start script launches NeoForge like this, and every JVM flag comes from user_jvm_args.txt:

java @user_jvm_args.txt @libraries/net/neoforged/neoforge/21.1.251/unix_args.txt nogui

(21.1.251 is the NeoForge version ATM10 8.2 uses. The path changes when the pack moves to a newer NeoForge.)

OLD FLAGS (what ATM10 ships, Aikar-style G1GC):

-Xms4G
-Xmx8G
-XX:+UseG1GC
-XX:+ParallelRefProcEnabled
-XX:MaxGCPauseMillis=200
# ...followed by more G1 tuning flags

NEW FLAGS (ZGC, from the official ATM guides for Java 21):

-Xms8G
-Xmx12G
-XX:+UseZGC
-XX:+ZGenerational
-XX:SoftMaxHeapSize=10g
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-XX:+PerfDisableSharedMem
-XX:+UseDynamicNumberOfGCThreads

Explanation:

  • -XX:+UseZGC: Enable Z Garbage Collector
  • -XX:+ZGenerational: Use generational mode (separates young/old objects)
  • -XX:SoftMaxHeapSize=10g: ZGC tries to stay under this size and only grows past it, up to -Xmx, when it has to
  • -XX:+UseDynamicNumberOfGCThreads: Lets Java decide how many GC threads to run instead of a fixed number
  • -XX:+AlwaysPreTouch: Initialize all RAM at startup (prevents mid-game allocation lag)

The ATM guides suggest this ZGC set for fast CPUs with 4+ cores, with -Xms8G -Xmx12G. The heap has to stay below your plan size, so on a 12GB plan lower -Xmx (and SoftMaxHeapSize with it) instead of copying 12G as is. On a 16GB or 32GB plan, raise both to fit.

Result: ZGC helps with lag spikes caused by garbage collection pauses. If spark shows world generation or machines eating the tick, the fixes further down matter more.


Server.properties Optimizations

Critical Settings

1. Keep the Watchdog, but Give It Room (Prevents False Crashes)

# Vanilla default (too short for modded)
max-tick-time=60000

# What the official ATM10 start script writes (keep this)
max-tick-time=180000

Why: ATM10's world generation and big machine setups can stall a single tick for a long time. At the vanilla 60 seconds, the watchdog can kill a server that was only slow. The official ATM10 start script raises it to 180000 (3 minutes) when it creates server.properties, so keep that value.

Warning: Don't set max-tick-time=-1. That turns the watchdog off completely, and a truly frozen server then hangs until someone notices, instead of shutting down so it can be restarted.

2. Reduce Simulation Distance

# Vanilla default (causes lag in ATM10)
simulation-distance=10

# What the official ATM10 start script writes
simulation-distance=5

# Optimized for a busy server
simulation-distance=4

Impact:

  • Distance 10: Server simulates 21x21 chunks = 441 chunks per player
  • Distance 5: Server simulates 11x11 chunks = 121 chunks per player
  • Distance 4: Server simulates 9x9 chunks = 81 chunks per player

Result: Going from the pack's 5 down to 4 cuts the simulated area per player by about a third. Players won't notice (mobs still spawn, farms still work within 4 chunks).

3. Keep View Distance at 8

# Vanilla default
view-distance=10

# What the official ATM10 start script writes (keep it)
view-distance=8

Why: View distance controls how far players can see. With ATM10's complex world generation, rendering 10 chunks in all directions overwhelms the server's chunk loading system. 8 chunks is still ~128 blocks (plenty for gameplay). The start script only writes this when it creates a new server.properties, so if yours came from somewhere else, set it yourself.

4. Disable Unnecessary Features

# These features are rarely used but consume resources
spawn-npcs=false
spawn-animals=false
spawn-monsters=true

# Only generate animals/NPCs in designated areas via mods

Note: Only turn spawn-animals off if your players already farm the animals they need.


World Pre-Generation (The #1 Lag Fix)

Why Pre-Generation is Critical

Without pre-gen:

Player explores new area →
Server generates new chunks on the spot →
Each chunk: Calculate biome, place features, spawn structures →
CPU maxes out →
TPS drops →
Everyone lags

With pre-gen:

Server pre-generates world during downtime (overnight) →
Player explores new area →
Server loads existing chunks from disk →
TPS holds steady →
Smooth gameplay

How to Pre-Generate with NeoForge's Built-in Command

ATM10 does not include a pregen mod like Chunky, but NeoForge has a pregenerator built in, so there is nothing to install. (Chunky commands only work if you add Chunky to the server yourself.)

Step 1: Start the Pregen

The full syntax is /neoforge generate start <x> <y> <z> <chunkRadius> [progressBar]. The radius counts chunks, not blocks, so divide your block radius by 16. For a 5,000-block radius around 0,0:

/neoforge generate start 0 64 0 313
  • chunkRadius can be 1 to 2500. It generates a square centered on the chunk that holds the position you give.
  • progressBar is on by default and shows a boss bar to the player who ran the command. Add false at the end to hide it.
  • The command needs permission level 4, so run it from the server console or as a level 4 op.
  • Only one pregen task can run at a time.

Step 2: Monitor Progress

/neoforge generate status

Step 3: Stop When Players Need the CPU (Optional)

/neoforge generate stop

There is no pause command, so stop the task and start it again later.

Other dimensions: The command only generates the dimension it runs in. From the console, pre-generate the Nether with:

/execute in minecraft:the_nether run neoforge generate start 0 64 0 100

Recommended Radius:

Player CountPre-Gen RadiuschunkRadius
1-5 players2,500 blocks156
6-15 players5,000 blocks313
16-30 players10,000 blocks625
30+ players15,000 blocks938

Pre-generated chunks take up disk space, so check your free storage before you pick a big radius.

Pro Tip: Run pre-gen overnight before server launch. Once it finishes, exploring inside that area no longer triggers new chunk generation.


Mod-Specific Optimizations

1. Create Mod (Rotating Blocks Killer)

Problem: Create's rotating blocks (water wheels, mechanical crafters) are calculated every tick. 50 windmills = 50x tick overhead.

Solution: Find the contraptions that cost the most with spark or Observable (both already ship with ATM10, see Monitoring below), then switch off or remove the ones that do not need to run all the time.

2. Refined Storage / Applied Energistics 2

Problem: Large storage networks recalculate every tick.

Solution: Check spark first so you know the network is really the cause. Then cut back on autocrafting setups and crafting CPUs you no longer use, instead of tearing down the whole network.

3. Chunk Loading (FTB Chunks)

Problem: Force-loaded chunks stay active even when no player is online, so the server keeps ticking entities, fluids and contraptions for empty bases.

Solution (recent FTB Chunks, ATM10 default):

  1. Open the map (M by default).
  2. Click the Server Settings gear (purple/blue gear, top right).
  3. Scroll to Offline Forceloading Mode and set it to Never.

This unloads all team and player force-loaded chunks the moment everyone logs off, which is usually what you want for a small ATM10 server. You can still cap how much each team is allowed to force-load with the Max Force Loaded Chunks setting in the same server menu, around 4-8 per player is plenty for normal farms.

If you want some chunks to stay loaded while everyone is offline (for example a long auto-craft or AE2 channel boot up), set Offline Forceloading Mode to If team has online members or Always only for the specific dimension you need, instead of leaving it on globally.

Why: Each permanently force-loaded chunk = tick overhead 24/7. Letting them unload when nobody is online takes that load off the server, with no real downside for casual play.

Note: On modern FTB Chunks the old Chicken Chunks mod is no longer needed. The Offline Forceloading toggle plus the per-team chunk cap covers the same use case without extra mods. Big thanks to Eric for flagging the outdated section, this is now updated.

4. Crash Utilities Item Clear (On by Default)

ATM10 ships Crash Utilities with Item Clear switched on. Every 5 minutes it counts the loaded item entities, and if there are more than 1000 it clears all of them, with chat warnings 20 and 5 seconds before.

That keeps dropped item piles from dragging the server down, but it can also wipe the output of a farm that dumps items on the ground. Change the timer or the limit, or turn it off, in config/crashutilities-server.toml (a copy in world/serverconfig/ overrides it for that world). Some older guides say Item Clear is off by default; in ATM10 it is on.


Dimension-Specific Lag Fixes

ATM10 adds several extra dimensions on top of the vanilla three. Each dimension = separate world loading.

The Nether

Problem: Players travel far in the Nether, and every new area there needs fresh chunk generation too.

Solution: Pre-generate the Nether as well. /neoforge generate only covers the dimension it runs in, so use the /execute in minecraft:the_nether line from the pre-generation section above.

Mining Dimension

Problem: Players strip-mine endlessly, generating huge numbers of new chunks.

Solution: Reset the Mining Dimension (from Allthemodium) weekly:

# Stop server and back up first
# Delete dimension folder
rm -rf world/dimensions/allthemodium/mining

# Restart server (dimension regenerates)

Add to weekly cron job. Players know it resets, so they don't build there.


Hardware Requirements Reality Check

Minimum Specs (1-5 Players)

ComponentSpecificationCost
CPURyzen 5 7600X or Intel i5-13600K$200-250
RAM16GB DDR4/DDR5$60-80
Storage500GB NVMe SSD$40-60
Network100 Mbps uploadISP dependent

Recommended (6-15 Players)

ComponentSpecificationCost (VPS)
CPURyzen 7 7700X / 7800X3D$60-80/month
RAM16GB+Included
Storage1TB NVMeIncluded
Network1 GbpsIncluded

Ideal (16-30 Players)

ComponentSpecificationCost (Dedicated)
CPURyzen 9 7950X / 9950X$120-150/month
RAM32GB+Included
Storage2TB NVMe (RAID 1)+$20/month
Network10 GbpsIncluded

Why Ryzen over Intel for ATM10?

  • Ryzen 7000/9000 series chips have strong single-core performance
  • Minecraft is single-threaded; the 7950X's individual cores are faster than Intel's E-cores
  • Better price-to-performance for gaming workloads

Monitoring and Diagnostics

Essential Tools

1. Spark Profiler

Spark already ships with ATM10, so there is nothing to install.

Usage:

# In-game (OP required)
/spark profiler --timeout 180

# Wait 3 minutes (during lag spike ideally)
# Spark generates web report: https://spark.lucko.me/xxx

Reading the Report (simplified example):

Top Contributors to Tick Time:
1. World Tick (43%)
   └─ Chunk Generation (38%)  ← PRE-GEN NEEDED
2. Entity Tick (31%)
   └─ Mekanism FluidTank (18%)  ← Reduce Mekanism networks
3. Tile Entity Tick (22%)
   └─ Create KineticNetwork (15%)  ← Reduce Create contraptions

Action: Focus on the top 3 contributors. Ignore anything <5%.

2. Observable (Visual Lag Identification)

Observable also ships with ATM10 and shows lag in-game:

  • Set a keybind for Observable in your Controls settings first (you need one to open it)
  • Open it, click the profile TPS button and wait for the run to finish
  • You get a list of the blocks and entities costing the most TPS, and laggy blocks light up from green to red in the world (red is worst)
  • Fly around your base to find culprits

3. NeoForge's Built-in Tracking

NeoForge can also time block entities and entities without any extra mod. Starting a run needs permission level 2:

/neoforge track start blockentity 60
# Wait 60 seconds, then show the results:
/neoforge track blockentity

Swap blockentity for entity to time mobs and other entities instead.


Emergency Lag Response Plan

Your server is at 5 TPS right now. Here's the quick fix:

Immediate Actions (Do in Order)

1. Check TPS

/neoforge tps
# Output: one line per loaded dimension, then an Overall line,
# each shown as "X TPS (Y ms/tick)"

/forge tps from older Forge guides is not a NeoForge command, so use /neoforge tps on ATM10.

If <10 TPS, continue:

2. Identify Lag Source

/spark profiler --timeout 60

3. Quick Fixes Based on Spark Output

If "Chunk Generation" is #1:

# Emergency: Reduce view distance immediately
# Edit server.properties:
view-distance=4
simulation-distance=3

# Restart server

If "Entity Tick" is #1:

# See which entity types are piling up
/neoforge entity list

# Kill all items on ground
/kill @e[type=item]

# Kill one problem mob type (swap in the ID from the list)
/kill @e[type=minecraft:zombie]

If "Mekanism" or "Create" is #1:

# Teleport to the chunk shown in Spark report
/tp @s <x> <y> <z>

# Break the offending machine (or switch it off)

4. Restart with ZGC

If you're still using G1GC and your server has 4+ fast cores, switch now:

# Edit the JVM arguments file
nano user_jvm_args.txt

# Keep your -Xms/-Xmx lines and replace the G1 flags
# with the ZGC set from Step 2 above, starting with:
-XX:+UseZGC
-XX:+ZGenerational

5. Announce Restart

/say Server restarting in 60 seconds for lag fix
/stop

If you run the official start script, it starts the server again 10 seconds after it stops, unless ATM10_RESTART=false is set.

Then: Run /neoforge tps again to check the fix worked, and pre-generate the world once things are stable.


Long-Term Stability Strategy

Weekly Maintenance Checklist

Sunday 3 AM (Low Traffic):

# 1. Stop the server first
#    (if the server runs under the official startserver.sh, it must have
#    been started as ATM10_RESTART=false ./startserver.sh, or press Ctrl+C
#    during the 10 second wait, or it starts again)
/stop

# 2. Backup world
tar -czf backups/world-$(date +%Y%m%d).tar.gz world/

# 3. Reset Mining Dimension
rm -rf world/dimensions/allthemodium/mining

# 4. Check disk space
df -h
# If >80% full, delete old backups:
rm backups/world-2026012*.tar.gz

# 5. Start server again
./startserver.sh

# 6. Clear entity buildup once the server is up:
/kill @e[type=item]
/kill @e[type=arrow]

Automate with Cron:

crontab -e

# Add:
0 3 * * 0 /home/minecraft/atm10/weekly-maintenance.sh

Performance Degradation Signs

Watch for these warnings:

SymptomLikely CauseFix
TPS slowly drops over daysEntity buildup (items, mobs)/neoforge entity list, then kill what piles up
Sudden TPS spike downPlayer hit new biome (generation lag)Pre-gen more chunks
TPS fine, players lagNetwork issue (not server)Check player connection
TPS <15 alwaysHardware insufficientUpgrade to the Premium tier (Ryzen 9 9950X)

ATM10 Server Configs (Copy-Paste)

JVM Arguments (user_jvm_args.txt)

# ATM10 with ZGC (Java 21), from the official ATM guides
# Keep -Xmx below your plan RAM: lower it (and SoftMaxHeapSize) on a 12GB plan, raise both on 16GB or 32GB
-Xms8G
-Xmx12G
-XX:+UseZGC
-XX:+ZGenerational
-XX:SoftMaxHeapSize=10g
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-XX:+PerfDisableSharedMem
-XX:+UseDynamicNumberOfGCThreads

Start it with the pack's own script:

chmod +x startserver.sh
./startserver.sh

server.properties (Optimized)

# Core Settings
server-port=25565
max-players=20
view-distance=8
simulation-distance=4
# max-tick-time, view-distance and allow-flight match the official start script
max-tick-time=180000
allow-flight=true

# World Settings
level-seed=
level-type=minecraft\:normal
spawn-protection=0
allow-nether=true
generate-structures=true

# Performance
spawn-npcs=false
spawn-animals=false
spawn-monsters=true
network-compression-threshold=256

When to Give Up and Upgrade Hardware

Signs Your Hardware Can't Handle ATM10

  • You've done everything in this guide
  • TPS still <15 with <10 players
  • CPU at 100% constantly (check with htop)

Solution: You need better hardware.

Upgrade Path

CurrentBottleneckUpgrade ToCost
i5-12400CPU (low single-core)Ryzen 7 7700X$300
8GB RAMMemory (constant swapping)16GB$60
SATA SSDDisk I/O (chunk loading)NVMe Gen3$80
Shared VPSCPU steal timeDedicated VPS$50/mo

Best bang-for-buck: Upgrade CPU to Ryzen 7700X/7800X3D. ATM10 is CPU-bound above all else.


Conclusion: The ATM10 Optimization Hierarchy

Fix issues in this order:

  1. Enable Generational ZGC if your server has 4+ fast cores (otherwise keep the pack's G1 flags)
  2. Pre-generate the world with /neoforge generate (fewer lag spikes while exploring)
  3. Keep max-tick-time at 180000 (prevents false crashes without hiding real freezes)
  4. Reduce simulation/view distance
  5. Find heavy Create/Mekanism setups with spark and switch off what you do not need
  6. Weekly entity cleanup (prevents long-term degradation)
  7. Upgrade hardware if still lagging (last resort)

Work through this list in order and check /neoforge tps after each step, so you know which fix actually helped.


Need hosting for heavy modpacks? Our All The Mods 10 server hosting plans start at 12GB for 1 to 5 players, with 16GB and 32GB plans for bigger groups. Every plan runs on NVMe storage, and you set your own JVM arguments in the panel's Startup tab. Premium plans in the Netherlands, Germany, Poland and Canada run on a Ryzen 9 9950X with DDR5.

Related Guides:

ATM10 Requirements and JVM Guides

If you are still choosing RAM and CPU, read ATM10 server requirements. If your startup flags are the problem, use Minecraft ATM10 JVM arguments.

If your client is crashing outright rather than lagging, that is a different problem: see exit code -1073740791 and why "outdated video drivers" is often wrong.

Minecraft on AMD Ryzen 9

Host Your Modded & Vanilla Minecraft Server

From €2.70/mo with NVMe storage, DDoS protection included, and a modpack installer in the panel for the CurseForge and Modrinth packs it lists, or upload your own server files over SFTP.