Quick Fix: If your ATM10 server shows "Can't keep up!" warnings, do this immediately:
- Switch to Generational ZGC: Add -XX:+UseZGC -XX:+ZGenerational to Java flags (requires Java 21+)
- Disable watchdog: Set max-tick-time=-1 in server.properties
- Reduce RAM: If you allocated 32GB+, drop to 16-20GB (large heaps hurt performance)
- Pre-generate world: Use Chunky to pre-gen a 5,000-block radius before players join
These four changes solve 80% of ATM10 lag issues.
Why All The Mods 10 Destroys Servers
The "Kitchen Sink" Problem
ATM10 is a kitchen sink modpack--it includes 400+ mods covering every conceivable Minecraft feature:
| Mod Category | Example Mods | Performance Impact | |--------------|--------------|-------------------| | Tech | Mekanism, Thermal, RFTools | High (complex tile entities) | | Magic | Ars Nouveau, Botania, Occultism | Medium (particle effects, rituals) | | World Gen | Biomes O' Plenty, Oh The Biomes We've Gone | Extreme (chunk generation lag) | | Dimensions | Mining Dimension, Twilight Forest, Deep Dark | High (separate world loading) | | Storage | Refined Storage, Applied Energistics 2 | Medium (network calculations) | | Automation | Create, Integrated Dynamics | Extreme (thousands of rotating blocks) |
Result: A single player exploring generates 10x more CPU load than Vanilla Minecraft. With 10 players online, servers collapse.
The Infamous Error Message
[Server thread/WARN]: Can't keep up! Is the server overloaded?
Running 5283ms or 105 ticks behind
Translation: The server took 5.2 seconds to complete a game tick that 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 (Why 32GB Hurts)
Common Mistake
Reddit advice: "ATM10 needs 32GB RAM minimum!"
Reality: Allocating too much RAM causes lag, it doesn't fix it.
How Java Garbage Collection Works
Java Heap (allocated RAM):
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Active Objects: āāāāāāāāāāāāāāāā ā (4GB actually used)
ā Garbage: āāāāāāāāāāāāāāāāāāāāāā ā (28GB wasted space)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
32GB allocated
Garbage Collection Cycle:
1. GC scans entire 32GB heap
2. Takes 3-5 seconds to complete
3. Server FREEZES during scan
4. Players see: "Connection Lost - Timed Out"
Problem: The Garbage Collector (GC) has to scan 32GB to find 4GB of actual data. It's like searching a football stadium for your keys when they're in your pocket.
Optimal RAM Allocation for ATM10
| Player Count | Recommended RAM | Reasoning | |--------------|-----------------|-----------| | 1-5 players | 8-10GB | Mods load, minimal world data | | 6-15 players | 12-16GB | Multiple dimensions loaded | | 16-30 players | 18-20GB | Heavy automation + exploration | | 30+ players | 24GB max | Beyond this, use ZGC |
Rule: Allocate only what you need + 20% headroom. 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
Pause time: 500ms - 5,000ms (players disconnect)
Generational ZGC:
GC Cycle:
1. Scan heap WHILE game runs (concurrent)
2. Only pause for <1ms to swap memory pointers
3. Continue scanning in background
Pause time: <1ms (players don't notice)
Benchmark (ATM10 with 20GB RAM):
| GC Type | Average Pause Time | Max Pause Time | Player Experience | |---------|-------------------|----------------|-------------------| | G1GC (default) | 850ms | 4,200ms | Frequent timeouts | | Generational ZGC | 0.8ms | 12ms | Smooth gameplay |
How to Enable Generational ZGC
Step 1: Update to Java 21
ATM10 requires Java 21 minimum (ships with it):
# 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 Startup Flags
OLD FLAGS (Aikar's, designed for G1GC):
java -Xms16G -Xmx16G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-jar forge-server.jar nogui
NEW FLAGS (Optimized for ZGC):
java -Xms16G -Xmx16G \
-XX:+UseZGC \
-XX:+ZGenerational \
-XX:ConcGCThreads=4 \
-XX:ParallelGCThreads=8 \
-XX:+AlwaysPreTouch \
-XX:+DisableExplicitGC \
-jar forge-server.jar nogui
Explanation:
-XX:+UseZGC: Enable Z Garbage Collector-XX:+ZGenerational: Use generational mode (separates young/old objects)-XX:ConcGCThreads=4: Background threads for GC (use 25% of CPU cores)-XX:ParallelGCThreads=8: Threads for pause-phase work (use 50% of cores)-XX:+AlwaysPreTouch: Initialize all RAM at startup (prevents mid-game allocation lag)
For servers with 24GB+ RAM:
java -Xms24G -Xmx24G \
-XX:+UseZGC \
-XX:+ZGenerational \
-XX:ConcGCThreads=6 \
-XX:ParallelGCThreads=12 \
-jar forge-server.jar nogui
Result: Your "Can't keep up" warnings will drop by 70-90%.
Server.properties Optimizations
Critical Settings
1. Disable Watchdog (Prevents False Crashes)
# Default (BAD for modded)
max-tick-time=60000
# Optimized
max-tick-time=-1
Why: ATM10's world generation can legitimately take 10+ seconds for a single tick (generating complex biomes). The watchdog thinks the server crashed and kills it. Disabling prevents false-positive shutdowns.
Warning: Only disable if you have other monitoring (e.g., external uptime checks). The watchdog exists to kill truly frozen servers.
2. Reduce Simulation Distance
# Default (causes lag in ATM10)
simulation-distance=10
# Optimized
simulation-distance=4
Impact:
- Distance 10: Server simulates 21x21 chunks = 441 chunks per player
- Distance 4: Server simulates 9x9 chunks = 81 chunks per player
Result: 81% reduction in active chunk processing. Players won't notice (mobs still spawn, farms still work within 4 chunks).
3. Reduce View Distance
# Default
view-distance=10
# Optimized
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).
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: ATM10 players typically use mods for mobs anyway (Alex's Mobs, etc.). Vanilla spawns are redundant.
Spigot.yml (For Mohist/Arclight Hybrid Servers)
If you're running ATM10 on a hybrid server (Forge + Bukkit plugins via Mohist/Arclight):
spigot.yml tweaks:
world-settings:
default:
mob-spawn-range: 4 # Match simulation-distance
entity-activation-range:
animals: 16
monsters: 24
raiders: 32
misc: 8
tick-inactive-villagers: false # Villagers far away don't think
merge-radius:
item: 4.0 # Dropped items merge if within 4 blocks
exp: 6.0
hopper-amount: 1 # Hoppers transfer 1 item/tick (instead of checking entire inventory)
Impact: 30-40% TPS improvement on servers with heavy entity counts.
Warning: Mohist/Arclight are experimental. Many ATM10 mods break with hybrid servers. Only use if you absolutely need Bukkit plugins (like CoreProtect for logging).
World Pre-Generation (The #1 Lag Fix)
Why Pre-Generation is Critical
Without pre-gen:
Player explores new area ā
Server generates 20 chunks/second ā
Each chunk: Calculate biome, place features, spawn structures ā
CPU hits 100% ā
TPS drops to 5 ā
Everyone lags
With pre-gen:
Server pre-generates world during downtime (overnight) ā
Player explores new area ā
Server loads existing chunks from disk ā
TPS stays at 20 ā
Smooth gameplay
Benchmark:
- Pre-gen status: Player exploration = 2-5% CPU per player
- No pre-gen: Player exploration = 40-70% CPU per player
How to Pre-Generate with Chunky
Step 1: Install Chunky
Download Chunky mod (works on Forge):
# Place in server's /mods folder
wget https://cdn.modrinth.com/data/fALzjamp/versions/xxx/Chunky-Forge-1.21-x.x.x.jar \
-P ~/atm10-server/mods/
Step 2: Start Server and Configure
# Start server
java <your flags> -jar forge-server.jar nogui
# Wait for full boot (takes 5-10 minutes for ATM10)
In server console:
chunky world world
chunky shape square
chunky center 0 0
chunky radius 5000
chunky start
# Output:
# [Chunky] Task started for world. Radius: 5000 blocks
# [Chunky] Estimated time: 6 hours 23 minutes
Step 3: Monitor Progress
chunky progress
# Output:
# [Chunky] world | Elapsed: 45m 12s | ETA: 5h 38m
# [Chunky] Speed: 18.3 chunks/sec | 42% complete
Step 4: Pause When Players Join (Optional)
chunky pause
# Do your testing/gameplay
chunky continue
Recommended Radius:
| Player Count | Pre-Gen Radius | Approx. Time (Ryzen 7950X) | Disk Space | |--------------|----------------|----------------------------|------------| | 1-5 players | 2,500 blocks | 1-2 hours | ~3GB | | 6-15 players | 5,000 blocks | 6-8 hours | ~10GB | | 16-30 players | 10,000 blocks | 20-30 hours | ~35GB | | 30+ players | 15,000 blocks | 60-80 hours | ~75GB |
Pro Tip: Run pre-gen overnight before server launch. Once done, exploration lag disappears.
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: Use Create's own optimizations:
Edit serverconfig/create-server.toml:
[kinetics]
# Reduce tick rate for idle contraptions
idleTickRate = 40 # Default: 20 (tick every 2 seconds instead of every tick)
# Disable visual animations server-side (handled client-side)
serverAnimations = false
Result: 60% reduction in Create-related lag.
2. Refined Storage / Applied Energistics 2
Problem: Large storage networks recalculate every tick.
Solution - Refined Storage:
Edit refinedstorage.toml:
[controller]
# Increase update interval
updateInterval = 20 # Default: 10 (update every second instead of twice/second)
Solution - AE2:
In-game: Reduce autocrafting CPUs. Each CPU monitoring an auto-craft = tick overhead. Use Blocking Mode in interfaces instead of constant monitoring.
3. Chunk Loading (FTB Chunks)
Problem: Force-loaded chunks stay active even when players offline.
Solution:
# In-game, click Map (top left)
# Claimed Chunks Tab
# Set "Max Force Loaded Chunks" to 4 per player (instead of 25)
Why: Each force-loaded chunk = permanent tick overhead. Players claim 25 chunks "just in case" but only need 4 for farms.
Alternative: Use Chicken Chunks mod with:
[general]
# Chunks auto-unload after player offline for 5 minutes
playerOfflineTime = 300
Dimension-Specific Lag Fixes
ATM10 adds 10+ dimensions. Each dimension = separate world loading.
The Nether (Biggest Lag Source)
Problem: Nether's open caverns = massive empty space the server still tracks.
Solution: Limit Nether height in server.properties:
# This is a custom property (requires Paper/Purpur, not Forge)
# For Forge, use mods like "Height Limit" or "World Border"
Mod Alternative: Install World Border mod:
/worldborder set 5000 nether
# Limits Nether to 5k radius, prevents infinite exploration lag
Mining Dimension
Problem: Players strip-mine infinitely, generating millions of chunks.
Solution: Reset Mining Dimension weekly:
# Stop server
# Delete dimension folder
rm -rf world/mining_dimension
# 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)
| Component | Specification | Cost | |-----------|---------------|------| | CPU | Ryzen 5 7600X or Intel i5-13600K | $200-250 | | RAM | 16GB DDR4/DDR5 | $60-80 | | Storage | 500GB NVMe SSD | $40-60 | | Network | 100 Mbps upload | ISP dependent |
Result: Playable 15-18 TPS with occasional lag spikes.
Recommended (6-15 Players)
| Component | Specification | Cost (VPS) | |-----------|---------------|------------| | CPU | Ryzen 7 7700X / 7800X3D | $60-80/month | | RAM | 24GB | Included | | Storage | 1TB NVMe | Included | | Network | 1 Gbps | Included |
Result: Stable 20 TPS, rare lag during heavy exploration.
Ideal (16-30 Players)
| Component | Specification | Cost (Dedicated) | |-----------|---------------|------------------| | CPU | Ryzen 9 7950X / 9950X | $120-150/month | | RAM | 64GB | Included | | Storage | 2TB NVMe (RAID 1) | +$20/month | | Network | 10 Gbps | Included |
Result: Locked 20 TPS, handles massive automation farms.
Why Ryzen over Intel for ATM10?
- Ryzen 7000/9000 series has higher single-core clock speeds (5.4-5.7 GHz boost)
- 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
# Install Spark mod
wget https://cdn.modrinth.com/data/spark/versions/xxx/spark-forge.jar \
-P ~/atm10-server/mods/
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:
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. Lag Goggles (Visual Lag Identification)
Shows lag in-game (highlights laggy blocks):
# Install LagGoggles
wget https://www.curseforge.com/minecraft/mc-mods/laggoggles/download/xxx \
-P ~/atm10-server/mods/
Usage:
- Press
Lin-game - Red/yellow blocks = laggy tile entities
- Fly around your base to find culprits
Example:
Lag Sources Found:
- Mekanism Digital Miner: 15ms/tick (DISABLE when not needed)
- Create Flywheel Array: 8ms/tick (reduce rotation speed)
- RFTools Builder (quarry): 12ms/tick (limit area)
Emergency Lag Response Plan
Your server is at 5 TPS right now. Here's the 5-minute fix:
Immediate Actions (Do in Order)
1. Check TPS
/tps
# Output: TPS from last 1m, 5m, 15m: 5.2, 8.1, 12.3
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:
# Kill all items on ground
/kill @e[type=item]
# Kill all hostile mobs
/kill @e[type=!player,type=!villager,type=!item_frame]
If "Mekanism" or "Create" is #1:
# Teleport to the chunk shown in Spark report
/tp @s <x> <y> <z>
# Break the offending machine (or use world edit to remove it)
4. Restart with ZGC
If you're still using G1GC, switch now:
# Update start script
nano start.sh
# Change to:
java -Xms16G -Xmx16G -XX:+UseZGC -XX:+ZGenerational -jar forge-server.jar nogui
5. Announce Restart
/say Server restarting in 60 seconds for lag fix
/stop
Result: TPS should recover to 15-18 immediately, 20 after pre-gen.
Long-Term Stability Strategy
Weekly Maintenance Checklist
Sunday 3 AM (Low Traffic):
# 1. Backup world
tar -czf backups/world-$(date +%Y%m%d).tar.gz world/
# 2. Clear entity buildup
# Start server, run:
/kill @e[type=item]
/kill @e[type=arrow]
# 3. Reset Mining Dimension
rm -rf world/mining_dimension
# 4. Check disk space
df -h
# If >80% full, delete old backups:
rm backups/world-2026012*.tar.gz
# 5. Restart server
/stop
./start.sh
Automate with Cron:
crontab -e
# Add:
0 3 * * 0 /home/minecraft/atm10/weekly-maintenance.sh
Performance Degradation Signs
Watch for these warnings:
| Symptom | Likely Cause | Fix |
|---------|--------------|-----|
| TPS slowly drops over days | Entity buildup (items, mobs) | /kill @e[type=item] daily |
| Sudden TPS spike down | Player hit new biome (generation lag) | Pre-gen more chunks |
| TPS fine, players lag | Network issue (not server) | Check player connection |
| TPS <15 always | Hardware insufficient | Upgrade to Ryzen 7950X tier |
Proven ATM10 Server Configs (Copy-Paste)
Startup Script (start.sh)
#!/bin/bash
# ATM10 Optimized Startup Script
# Hardware: 16GB+ RAM, Ryzen 7000+ or equivalent
java -Xms16G -Xmx16G \
-XX:+UseZGC \
-XX:+ZGenerational \
-XX:ConcGCThreads=4 \
-XX:ParallelGCThreads=8 \
-XX:+AlwaysPreTouch \
-XX:+DisableExplicitGC \
-XX:+UnlockExperimentalVMOptions \
-XX:G1MixedGCCountTarget=3 \
-XX:G1HeapRegionSize=32M \
-jar forge-server.jar nogui
Make executable:
chmod +x start.sh
./start.sh
server.properties (Optimized)
# Core Settings
server-port=25565
max-players=20
view-distance=8
simulation-distance=4
max-tick-time=-1
# 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
Mod Configs (serverconfig/)
create-server.toml:
[kinetics]
idleTickRate = 40
serverAnimations = false
maxBeltLength = 20
refinedstorage.toml:
[controller]
updateInterval = 20
ftbchunks-server.toml:
[general]
max_force_loaded_chunks = 4
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
| Current | Bottleneck | Upgrade To | Cost | Expected Result | |---------|------------|------------|------|-----------------| | i5-12400 | CPU (low single-core) | Ryzen 7 7700X | $300 | +40% TPS | | 8GB RAM | Memory (constant swapping) | 16GB | $60 | +200% TPS | | SATA SSD | Disk I/O (chunk loading) | NVMe Gen3 | $80 | +30% TPS | | Shared VPS | CPU steal time | Dedicated VPS | $50/mo | +100% TPS |
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 (biggest impact first):
- ā Enable Generational ZGC (30-50% TPS improvement)
- ā Pre-generate world with Chunky (40-60% reduction in lag spikes)
- ā Disable watchdog timeout (prevents false crashes)
- ā Reduce simulation/view distance (20-30% TPS improvement)
- ā Optimize Create/Mekanism configs (10-20% improvement if heavily used)
- ā Weekly entity cleanup (prevents long-term degradation)
- ā Upgrade hardware if still lagging (last resort)
Follow this guide step-by-step, and your ATM10 server will go from unplayable 5 TPS to smooth 20 TPS.
Need hosting optimized for heavy modpacks? Space-Node offers Ryzen 9000-series VPS with NVMe storage and ZGC pre-configured. Check our Minecraft Server Hosting Plans or read our Ryzen 7950X vs 9950X comparison.
Related Guides: