[{"data":1,"prerenderedAt":458},["ShallowReactive",2],{"\u002Fguides\u002Fspark-profiler-paper-docker\u002F":3,"guides:en":385,"published-guide-paths":446},{"id":4,"title":5,"author":6,"body":7,"category":348,"date":349,"description":350,"excerpt":351,"extension":352,"faq":353,"featured":363,"featuredOrder":351,"localeGroup":364,"meta":365,"navigation":366,"path":367,"published":366,"related":368,"seo":372,"slug":364,"sources":373,"stem":383,"updated":349,"__hash__":384},"guides\u002Fguides\u002F11.spark-profiler-paper-docker.md","Use Spark Profiler to Find Minecraft Lag in Paper and Docker","setupmc.com Team",{"type":8,"value":9,"toc":330},"minimark",[10,15,24,27,40,44,47,50,54,57,68,71,80,84,87,93,96,99,113,117,120,134,137,141,144,156,159,163,166,183,186,197,201,204,207,215,219,286,290,295,298,302,305,309],[11,12,14],"h2",{"id":13},"why-spark-should-be-your-first-move","Why Spark should be your first move",[16,17,18,19,23],"p",{},"Profiling is how you stop guessing.\nPaper documents Spark as the preferred profiler and bundles it starting with ",[20,21,22],"strong",{},"1.21",".",[16,25,26],{},"That changes the usual admin workflow:",[28,29,30,34,37],"ul",{},[31,32,33],"li",{},"you no longer need to jump straight into random config changes",[31,35,36],{},"you can capture evidence from the live server",[31,38,39],{},"you can hand a real report to a plugin author or support channel if needed",[11,41,43],{"id":42},"before-you-start","Before you start",[16,45,46],{},"Profile only when the issue is happening.\nIf the server feels fine right now, the report will mostly confirm that it feels fine.",[16,48,49],{},"That is why Paper explicitly warns that profiling is only effective while the problem is actively occurring.",[11,51,53],{"id":52},"step-1-confirm-the-lag-signal","Step 1: Confirm the lag signal",[16,55,56],{},"Run:",[58,59,65],"pre",{"className":60,"code":62,"language":63,"meta":64},[61],"language-text","\u002Fspark tps\n","text","",[66,67,62],"code",{"__ignoreMap":64},[16,69,70],{},"This gives you the immediate health view and tells you whether you are dealing with sustained low TPS, spikes, or mostly normal behavior.",[16,72,73,74,79],{},"If you do not currently have practical admin access, set up ",[75,76,78],"a",{"href":77},"\u002Fguides\u002Fadminister-docker-minecraft-server-rcon-console\u002F","RCON and console access in Docker"," first.",[11,81,83],{"id":82},"step-2-start-a-timed-profile","Step 2: Start a timed profile",[16,85,86],{},"Paper's own example is:",[58,88,91],{"className":89,"code":90,"language":63,"meta":64},[61],"\u002Fspark profiler start --timeout 600\n",[66,92,90],{"__ignoreMap":64},[16,94,95],{},"That records for ten minutes and then returns a report URL.",[16,97,98],{},"Ten minutes is long enough to catch:",[28,100,101,104,107,110],{},[31,102,103],{},"repeating scheduled tasks",[31,105,106],{},"heavy chunk exploration",[31,108,109],{},"farms under real player load",[31,111,112],{},"longer GC patterns",[11,114,116],{"id":115},"step-3-reproduce-the-actual-problem","Step 3: Reproduce the actual problem",[16,118,119],{},"While the profiler is running, do not leave the server empty unless emptiness is the problem.\nLet players keep doing the thing that caused the lag:",[28,121,122,125,128,131],{},[31,123,124],{},"exploring new terrain",[31,126,127],{},"using a farm",[31,129,130],{},"entering a busy base",[31,132,133],{},"running a minigame",[16,135,136],{},"You want the profile to capture the expensive behavior, not the quiet aftermath.",[11,138,140],{"id":139},"step-4-read-the-report-in-the-right-order","Step 4: Read the report in the right order",[16,142,143],{},"Do not start by staring at every number.\nUse this order:",[145,146,147,150,153],"ol",{},[31,148,149],{},"overall tick health",[31,151,152],{},"top hot paths or heavy tasks",[31,154,155],{},"plugin-specific or chunk-specific concentration",[16,157,158],{},"You are looking for concentration, not randomness.\nIf one plugin, one subsystem, or one region dominates the report, that is your first real lead.",[11,160,162],{"id":161},"step-5-turn-findings-into-one-concrete-change","Step 5: Turn findings into one concrete change",[16,164,165],{},"Good first actions are specific:",[28,167,168,174,177,180],{},[31,169,170,171],{},"lower ",[66,172,173],{},"simulation-distance",[31,175,176],{},"disable one plugin feature",[31,178,179],{},"limit a farm design",[31,181,182],{},"pre-generate chunks before an event",[16,184,185],{},"Bad first actions are vague:",[28,187,188,191,194],{},[31,189,190],{},"“give it more RAM”",[31,192,193],{},"“optimize everything”",[31,195,196],{},"“paste someone else’s config pack”",[11,198,200],{"id":199},"docker-specific-note","Docker-specific note",[16,202,203],{},"Spark runs inside the Paper server process, so Docker does not change the profiling method much.\nWhat Docker does change is how you access the console and logs.",[16,205,206],{},"Useful commands around a profiling session:",[58,208,213],{"className":209,"code":211,"language":212,"meta":64},[210],"language-bash","docker compose logs -f mc\ndocker exec mc rcon-cli \"spark profiler start --timeout 600\"\n","bash",[66,214,211],{"__ignoreMap":64},[11,216,218],{"id":217},"common-mistakes","Common mistakes",[220,221,222,238],"table",{},[223,224,225],"thead",{},[226,227,228,232,235],"tr",{},[229,230,231],"th",{},"Mistake",[229,233,234],{},"Why it hurts",[229,236,237],{},"Better move",[239,240,241,253,264,275],"tbody",{},[226,242,243,247,250],{},[244,245,246],"td",{},"Profiling an idle server",[244,248,249],{},"Report misses the real bottleneck",[244,251,252],{},"Profile under active load",[226,254,255,258,261],{},[244,256,257],{},"Making many fixes at once",[244,259,260],{},"You never learn what mattered",[244,262,263],{},"Apply one high-confidence change first",[226,265,266,269,272],{},[244,267,268],{},"Ignoring chunk and entity context",[244,270,271],{},"The hot path stays abstract",[244,273,274],{},"Relate the report to in-game behavior",[226,276,277,280,283],{},[244,278,279],{},"Treating every red number as equally important",[244,281,282],{},"You drown in noise",[244,284,285],{},"Look for dominant consumers first",[11,287,289],{"id":288},"faq","FAQ",[291,292,294],"h3",{"id":293},"what-if-spark-shows-mostly-normal-values-but-players-still-complain","What if Spark shows mostly normal values, but players still complain?",[16,296,297],{},"Then the issue may be intermittent, network-related, or outside the server tick path. Repeat the profile during the actual bad window.",[291,299,301],{"id":300},"should-i-still-use-timings","Should I still use Timings?",[16,303,304],{},"Paper documents Timings as deprecated in favor of Spark and notes that it is harder for beginners to read.",[11,306,308],{"id":307},"next-steps","Next steps",[28,310,311,318,325],{},[31,312,313,314,23],{},"If you still need the basics of TPS and MSPT, read ",[75,315,317],{"href":316},"\u002Fguides\u002Fminecraft-server-lag-tps-mspt-cant-keep-up\u002F","Minecraft Server Lag Explained",[31,319,320,321,23],{},"If the report points to chunk simulation pressure, go to ",[75,322,324],{"href":323},"\u002Fguides\u002Fpaper-view-distance-vs-simulation-distance\u002F","View Distance vs Simulation Distance",[31,326,327,328,23],{},"If your admin path is clumsy, improve it with ",[75,329,78],{"href":77},{"title":64,"searchDepth":331,"depth":331,"links":332},2,[333,334,335,336,337,338,339,340,341,342,347],{"id":13,"depth":331,"text":14},{"id":42,"depth":331,"text":43},{"id":52,"depth":331,"text":53},{"id":82,"depth":331,"text":83},{"id":115,"depth":331,"text":116},{"id":139,"depth":331,"text":140},{"id":161,"depth":331,"text":162},{"id":199,"depth":331,"text":200},{"id":217,"depth":331,"text":218},{"id":288,"depth":331,"text":289,"children":343},[344,346],{"id":293,"depth":345,"text":294},3,{"id":300,"depth":345,"text":301},{"id":307,"depth":331,"text":308},"performance","2026-04-01","Paper bundles Spark starting with 1.21, which makes it the preferred profiler for diagnosing lag. This guide shows how to capture a useful report and how to read the first findings without guesswork.",null,"md",[354,357,360],{"question":355,"answer":356},"Do I need to install Spark separately on modern Paper?","Not usually. Paper documents that starting with version 1.21 it bundles Spark and recommends it as the preferred profiler.",{"question":358,"answer":359},"When should I start profiling?","Profile while the problem is actively happening. Paper explicitly warns that profiling is only effective when the issue you are diagnosing is occurring.",{"question":361,"answer":362},"How long should a profile run?","Ten minutes is a good default because it captures sustained lag and recurring spikes. Paper’s own example uses a 600-second timeout.",false,"spark-profiler-paper-docker",{},true,"\u002Fguides\u002Fspark-profiler-paper-docker",[369,370,371],"minecraft-lag-tps-mspt","paper-view-distance-simulation-distance","docker-minecraft-rcon-console",{"title":5,"description":350},[374,377,380],{"title":375,"url":376},"Paper profiling docs","https:\u002F\u002Fdocs.papermc.io\u002Fpaper\u002Fprofiling\u002F",{"title":378,"url":379},"Spark documentation","https:\u002F\u002Fspark.lucko.me\u002Fdocs\u002F",{"title":381,"url":382},"itzg command docs","https:\u002F\u002Fdocker-minecraft-server.readthedocs.io\u002Fen\u002Flatest\u002Fsending-commands\u002Fcommands\u002F","guides\u002F11.spark-profiler-paper-docker","m7_BKGE8z_uBmIQOJIvMi2T5cs8165NmkxlHjIec1S4",[386,393,400,405,406,411,417,422,428,434,440],{"path":387,"title":388,"description":389,"excerpt":351,"author":6,"date":390,"category":391,"localeGroup":392},"\u002Fguides\u002Fminecraft-crossplay-geyser-floodgate","Set Up Java and Bedrock Crossplay with Geyser and Floodgate","Want Bedrock players on phones or consoles to join your Java server? This guide shows a direct Paper-based Geyser and Floodgate setup without introducing a separate proxy layer.","2026-04-04","networking","geyser-floodgate-crossplay",{"path":394,"title":395,"description":396,"excerpt":351,"author":6,"date":397,"category":398,"localeGroup":399},"\u002Fguides\u002Fpaper-vs-vanilla-vs-fabric-vs-forge","Paper vs Vanilla vs Fabric vs Forge: Which Minecraft Server Software Should You Choose?","Choosing the wrong server software creates avoidable pain later. This guide compares Vanilla, Paper, Fabric, Quilt, Forge, and NeoForge based on plugins, mods, performance, and operational complexity.","2026-04-03","docker-operations","minecraft-server-software-choice",{"path":401,"title":402,"description":403,"excerpt":351,"author":6,"date":404,"category":348,"localeGroup":370},"\u002Fguides\u002Fpaper-view-distance-vs-simulation-distance","View Distance vs Simulation Distance: Safe Starting Values for Paper","Paper exposes view-distance and simulation-distance separately, which makes them one of the safest first levers for performance tuning. This guide explains what each setting changes and which starting values are sensible.","2026-04-02",{"path":367,"title":5,"description":350,"excerpt":351,"author":6,"date":349,"category":348,"localeGroup":364},{"path":407,"title":408,"description":409,"excerpt":351,"author":6,"date":410,"category":348,"localeGroup":369},"\u002Fguides\u002Fminecraft-server-lag-tps-mspt-cant-keep-up","Minecraft Server Lag Explained: TPS, MSPT, and 'Can’t Keep Up'","This guide explains what TPS and MSPT actually mean, why “Can’t keep up” appears in the console, and which checks help you separate CPU, chunk, entity, and plugin problems quickly.","2026-03-31",{"path":412,"title":413,"description":414,"excerpt":351,"author":6,"date":415,"category":398,"localeGroup":416},"\u002Fguides\u002Ffix-permission-denied-itzg-docker-minecraft-server","Fix Permission Denied in itzg\u002Fminecraft-server with UID\u002FGID and Bind Mounts","Seeing permission errors in \u002Fdata or files that Docker cannot write? This guide explains why itzg\u002Fminecraft-server defaults to UID 1000:GID 1000 and how to fix ownership safely.","2026-03-09","itzg-permission-denied",{"path":418,"title":419,"description":420,"excerpt":351,"author":6,"date":421,"category":398,"localeGroup":371},"\u002Fguides\u002Fadminister-docker-minecraft-server-rcon-console","Administer a Docker Minecraft Server Safely with RCON and Console Access","Need to op a player, manage the whitelist, or stop the server cleanly? This guide shows how to use RCON and interactive console access with itzg\u002Fminecraft-server without exposing extra risk.","2026-03-08",{"path":423,"title":424,"description":425,"excerpt":351,"author":6,"date":426,"category":391,"localeGroup":427},"\u002Fguides\u002Fminecraft-domain-without-port-srv-record","Minecraft Domain Without a Port: How to Set Up an SRV Record","Want players to join via example.com instead of an IP and port? This guide shows how SRV records work for Minecraft Java Edition and how to configure them correctly.","2026-03-07","minecraft-srv-record-domain",{"path":429,"title":430,"description":431,"excerpt":351,"author":6,"date":432,"category":391,"localeGroup":433},"\u002Fguides\u002Fopen-port-25565-minecraft-server-hetzner-linux","How to Open Port 25565 for a Minecraft Server on Hetzner and Linux","Players cannot join even though the container is running? This guide shows how to open port 25565 correctly across Docker, UFW, and the Hetzner Cloud Firewall.","2026-03-05","open-port-25565-hetzner-linux",{"path":435,"title":436,"description":437,"excerpt":351,"author":6,"date":438,"category":398,"localeGroup":439},"\u002Fguides\u002Fdetermining-correct-java-version-for-operating-minecraft-server","Determining the Correct Java Version for Operating a Minecraft Server","If you want to set up a Minecraft server, you may encounter an error message related to the Java version when starting the server. In this article, you will learn how to determine the correct Java version for your Minecraft server.","2025-01-31","java-version-minecraft-server",{"path":441,"title":442,"description":443,"excerpt":351,"author":6,"date":444,"category":398,"localeGroup":445},"\u002Fguides\u002Fminecraft-server-with-docker-on-hetzner-cloud","Setting up a Minecraft Server on a Hetzner Cloud Server with Docker Compose","In this article, we will show you how to set up a server for Minecraft: Java Edition on a Hetzner Cloud server. We will go through the steps of creating the cloud server, installing Debian, setting up an SSH key, and configuring Docker Compose for easy server management.","2025-01-28","hetzner-docker-setup",[447,448,449,450,451,452,453,454,455,456,457,441,407,367,401,394,387,435,429,423,418,412],"\u002Fde\u002Fguides\u002Fminecraft-server-with-docker-on-hetzner-cloud","\u002Fde\u002Fguides\u002Fminecraft-server-lag-tps-mspt-cant-keep-up","\u002Fde\u002Fguides\u002Fspark-profiler-paper-docker","\u002Fde\u002Fguides\u002Fpaper-view-distance-vs-simulation-distance","\u002Fde\u002Fguides\u002Fpaper-vs-vanilla-vs-fabric-vs-forge","\u002Fde\u002Fguides\u002Fminecraft-crossplay-geyser-floodgate","\u002Fde\u002Fguides\u002Fdetermining-correct-java-version-for-operating-minecraft-server","\u002Fde\u002Fguides\u002Fopen-port-25565-minecraft-server-hetzner-linux","\u002Fde\u002Fguides\u002Fminecraft-domain-without-port-srv-record","\u002Fde\u002Fguides\u002Fadminister-docker-minecraft-server-rcon-console","\u002Fde\u002Fguides\u002Ffix-permission-denied-itzg-docker-minecraft-server",1775292570358]