{"id":1470,"date":"2026-10-23T22:55:35","date_gmt":"2026-10-23T22:55:35","guid":{"rendered":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/?p=1470"},"modified":"2026-10-23T22:55:35","modified_gmt":"2026-10-23T22:55:35","slug":"modded-server-crash-loop-triage-dumps","status":"publish","type":"post","link":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/","title":{"rendered":"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds"},"content":{"rendered":"<p class=\"wp-block-paragraph\">A modded Minecraft server that dies 14 seconds after accepting connections generates about 40 crash reports in ten hours and says nothing useful after the first three. A Rust server in the same loop often writes no crash report at all, leaving a truncated log and a core dump while the supervisor keeps relaunching it. Both sequences start by stopping the loop, not reading the dump.<\/p>\n\n<p class=\"wp-block-paragraph\">This assumes shell access, root, and the ability to edit the launch command. The exit codes and filenames below are the real ones from Paper\/Forge\/Fabric and Rust&#8217;s server binary.<\/p>\n\n<h2 class=\"wp-block-heading\">Stop the Loop Before You Read Anything<\/h2>\n\n<p class=\"wp-block-paragraph\">A restarting server destroys evidence: each boot overwrites the latest log, rotates crash reports, and can corrupt region files mid-write. Disable automatic restart, then start once manually in the foreground.<\/p>\n\n<pre class=\"wp-block-code\"><code># systemd case\nsystemctl stop gameserver\nsystemctl disable gameserver\n# start manually, capture everything\ncd \/srv\/server &amp;&amp; .\/start.sh 2&gt;&amp;1 | tee \/tmp\/tail.log<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Then reproduce twice in a row. One crash is a flaky interaction; the same crash at the same point twice is deterministic and bisectable. If it only happens with players connected, log a test client in at the same moment each run.<\/p>\n\n<h2 class=\"wp-block-heading\">Reading a JVM Crash: hs_err_pid and the Log Tail<\/h2>\n\n<p class=\"wp-block-paragraph\">The <code>hs_err_pid*.log<\/code> file is written for a native crash, not a Java exception. Its header names the signal and the failing frame, which tells you whether you are debugging Java code or a native library a mod loaded.<\/p>\n\n<pre class=\"wp-block-code\"><code>head -40 hs_err_pid*.log      # signal, siginfo, problematic frame\n# SEGV \/ SIGBUS in a .so  -&gt; native mod code\n# EXCEPTION_ACCESS_VIOLATION + 'Problematic frame: C [libc.so]' -&gt; suspect JNI\n# OutOfMemoryError in a thread dump -&gt; heap, not a crash<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">SIGSEGV with the problematic frame in a <code>.so<\/code> under <code>mods\/<\/code> or <code>libraries\/<\/code> is a native library bug, usually a build compiled against a different glibc or CPU baseline. SIGBUS in a memory-mapped file points at region files, and the fix is a restore, not a mod removal.<\/p>\n\n<p class=\"wp-block-paragraph\">With no <code>hs_err<\/code> file the JVM caught an exception and exited cleanly, which is a Java-level problem: read the log for the first <code>Caused by:<\/code> chain, not the last. The final exception is usually a shutdown handler failing after the real fault.<\/p>\n\n<h2 class=\"wp-block-heading\">Isolating the Offending Mod by Bisection<\/h2>\n\n<p class=\"wp-block-paragraph\">With a deterministic reproduction, bisect the mod list. Moving half the jars out of <code>mods\/<\/code> and booting takes two minutes; a 180-mod pack resolves in eight rounds.<\/p>\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/tmp\/modstash\nls mods &gt; \/tmp\/allmods.txt      # record the full list first\n# move second half out\nsed -n '91,180p' \/tmp\/allmods.txt | xargs -I{} mv mods\/{} \/tmp\/modstash\/<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Two caveats break naive bisection. Removing a library mod others depend on produces its own missing-dependency crash at load, so check the signature matches the original. Some packs fail only on a combination, so bisection converges on a pair \u2014 if the two halves give different crashes, look in the overlap.<\/p>\n\n<p class=\"wp-block-paragraph\">Rust has no loadable mod list in that sense, so the equivalent is plugin bisection under <code>oxide\/plugins\/<\/code>. The failure usually surfaces as a .NET exception with the plugin name in the trace \u2014 same method, smaller search space.<\/p>\n\n<h2 class=\"wp-block-heading\">Memory Settings That Actually Cause Crash Loops<\/h2>\n\n<p class=\"wp-block-paragraph\">Many &#8216;mod crashes&#8217; are heap configuration mistakes. Three account for most cases, and all produce a loop that looks like a mod fault because the exception fires inside mod code.<\/p>\n\n<p class=\"wp-block-paragraph\">First, <code>-Xmx<\/code> set close to physical RAM. A 16 GB box with <code>-Xmx14G<\/code> leaves 2 GB for the OS, metaspace, thread stacks, direct buffers, and page cache. The OOM killer takes the process and there is no <code>hs_err<\/code> because the kernel did the killing. If <code>dmesg | grep -i 'killed process'<\/code> shows it, the fix is <code>-Xmx10G<\/code>, not a mod removal.<\/p>\n\n<p class=\"wp-block-paragraph\">Second, heap versus off-heap. Chunk generators and Netty allocate direct buffers outside the heap, so a server at 60% heap usage can still die of native exhaustion at 13 GB RSS. If RSS climbs while heap stays flat, the limit is off-heap and <code>-XX:MaxDirectMemorySize<\/code> needs an explicit value.<\/p>\n\n<p class=\"wp-block-paragraph\">Third, GC pressure misread as a crash. An 8 GB heap running 200 mods at 60 players spends 25% of its time in GC and logs &#8216;tick took 4500ms&#8217; instead of crashing, until it degrades into an OOM. G1 with a 200\u2013400 ms pause target is the practical default; older collectors produce pause spikes that look like network problems.<\/p>\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Symptom<\/th><th>Likely cause<\/th><th>Check<\/th><\/tr><\/thead><tbody><tr><td>No hs_err, process gone<\/td><td>kernel OOM killer<\/td><td>dmesg grep killed<\/td><\/tr><tr><td>RSS high, heap flat<\/td><td>off-heap \/ direct buffers<\/td><td>RSS vs heap graph<\/td><\/tr><tr><td>Exception in mod code<\/td><td>dependency or version mismatch<\/td><td>first Caused by<\/td><\/tr><tr><td>SIGSEGV in .so<\/td><td>native library ABI<\/td><td>problematic frame line<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<h2 class=\"wp-block-heading\">Reproducing Deterministically<\/h2>\n\n<p class=\"wp-block-paragraph\">Record the conditions: world, player count, the last action taken, and the wall-clock time. Then reproduce with a script placing a bot at the same coordinates and repeating the action.<\/p>\n\n<p class=\"wp-block-paragraph\">For chunk-loading crashes, teleporting a bot across a coordinate boundary is enough; for entity-tick crashes, spawning the entity type at a fixed position does it. The test need only be repeatable, because a fix you cannot verify is a guess.<\/p>\n\n<h2 class=\"wp-block-heading\">What the Exit Code Tells You<\/h2>\n\n<p class=\"wp-block-paragraph\">The JVM exit code narrows the search before you open a single file. Exit 0 means a clean shutdown request, usually a stop command or a supervisor signal, not a crash. Exit 1 means an uncaught exception with a stack trace somewhere in the log. Exit 134 is SIGABRT, which on modded servers almost always means the JVM aborted on a fatal error and wrote an <code>hs_err<\/code> file.<\/p>\n\n<p class=\"wp-block-paragraph\">Exit 137 is the important one: 128 + 9, SIGKILL, which is the OOM killer or a container memory limit rather than any mod. Exit 143 is 128 + 15, SIGTERM, meaning the supervisor or the host sent a stop signal mid-startup, often after a health-check timeout. Chasing mods after a 137 is wasted effort \u2014 fix the memory ceiling first.<\/p>\n\n<h2 class=\"wp-block-heading\">Fixing, Verifying, and Keeping the Server Up<\/h2>\n\n<p class=\"wp-block-paragraph\">Once identified, prefer in order: update to a version that fixes it, swap for an equivalent, or pin its config to avoid the code path. Removing a mod outright is the last resort on an established world, since it strips blocks and entities from saved chunks permanently.<\/p>\n\n<p class=\"wp-block-paragraph\">Verify with three clean reproduction runs, then an hour at normal player load, before re-enabling the supervisor. If it was a native library, confirm the replacement matches your JVM architecture.<\/p>\n\n<p class=\"wp-block-paragraph\">Keep the evidence: one crash report per incident, the mod list at the time, and the launch command turn the next incident into a five-minute lookup. Servers with high mod counts also benefit from <a href=\"https:\/\/bestdedicatedwebhostingserver.com\/\">generous RAM and sustained clock headroom<\/a>, since a node that is memory-starved or thermally throttled turns a mild mod bug into a hard crash loop \u2014 and <a href=\"https:\/\/bestdedicatedwebhostingserver.com\/\">a written hardware baseline<\/a> is a useful second reference when the fault lies in the platform rather than the pack.<\/p>","protected":false},"excerpt":{"rendered":"<p>A modded Minecraft server that dies 14 seconds after accepting connections generates about 40 crash reports in ten hours and says nothing useful after the first three. A Rust server&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1470","post","type-post","status-publish","format-standard","hentry","category-server-guides-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds - Best Dedicated Web Hosting Server Blog<\/title>\n<meta name=\"description\" content=\"A modded Minecraft server that dies 14 seconds after accepting connections generates about 40 crash reports in ten hours and says nothing useful after the\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds\" \/>\n<meta property=\"og:description\" content=\"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/\" \/>\n<meta property=\"og:site_name\" content=\"Best Dedicated Web Hosting Server Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-23T22:55:35+00:00\" \/>\n<meta name=\"author\" content=\"bestdedicatedwebhostingserver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bestdedicatedwebhostingserver\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"bestdedicatedwebhostingserver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/\",\"url\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/\",\"name\":\"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds - Best Dedicated Web Hosting Server Blog\",\"isPartOf\":{\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#website\"},\"datePublished\":\"2026-10-23T22:55:35+00:00\",\"author\":{\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#\/schema\/person\/6eb5f9ea35033fe8e67df44397e089b1\"},\"description\":\"A modded Minecraft server that dies 14 seconds after accepting connections generates about 40 crash reports in ten hours and says nothing useful after the\",\"breadcrumb\":{\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#website\",\"url\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/\",\"name\":\"Best Dedicated Web Hosting Server Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#\/schema\/person\/6eb5f9ea35033fe8e67df44397e089b1\",\"name\":\"bestdedicatedwebhostingserver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/462a07aa37399bdb149e5f91dc3cd8906656bc4c7ed391a3b6f0199c5d2ab964?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/462a07aa37399bdb149e5f91dc3cd8906656bc4c7ed391a3b6f0199c5d2ab964?s=96&d=mm&r=g\",\"caption\":\"bestdedicatedwebhostingserver\"},\"sameAs\":[\"https:\/\/bestdedicatedwebhostingserver.com\/blog\",\"https:\/\/x.com\/bestdedicatedwebhostingserver\"],\"url\":\"https:\/\/bestdedicatedwebhostingserver.com\/blog\/author\/bestdedicatedwebhostingserver\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds - Best Dedicated Web Hosting Server Blog","description":"A modded Minecraft server that dies 14 seconds after accepting connections generates about 40 crash reports in ten hours and says nothing useful after the","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/","og_locale":"en_US","og_type":"article","og_title":"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds","og_description":"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds","og_url":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/","og_site_name":"Best Dedicated Web Hosting Server Blog","article_published_time":"2026-10-23T22:55:35+00:00","author":"bestdedicatedwebhostingserver","twitter_card":"summary_large_image","twitter_creator":"@bestdedicatedwebhostingserver","twitter_misc":{"Written by":"bestdedicatedwebhostingserver","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/","url":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/","name":"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds - Best Dedicated Web Hosting Server Blog","isPartOf":{"@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#website"},"datePublished":"2026-10-23T22:55:35+00:00","author":{"@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#\/schema\/person\/6eb5f9ea35033fe8e67df44397e089b1"},"description":"A modded Minecraft server that dies 14 seconds after accepting connections generates about 40 crash reports in ten hours and says nothing useful after the","breadcrumb":{"@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/modded-server-crash-loop-triage-dumps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Crash-Loop Triage: Finding the Offending Mod When a Modded Server Restarts Every 90 Seconds"}]},{"@type":"WebSite","@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#website","url":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/","name":"Best Dedicated Web Hosting Server Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#\/schema\/person\/6eb5f9ea35033fe8e67df44397e089b1","name":"bestdedicatedwebhostingserver","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/462a07aa37399bdb149e5f91dc3cd8906656bc4c7ed391a3b6f0199c5d2ab964?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/462a07aa37399bdb149e5f91dc3cd8906656bc4c7ed391a3b6f0199c5d2ab964?s=96&d=mm&r=g","caption":"bestdedicatedwebhostingserver"},"sameAs":["https:\/\/bestdedicatedwebhostingserver.com\/blog","https:\/\/x.com\/bestdedicatedwebhostingserver"],"url":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/author\/bestdedicatedwebhostingserver\/"}]}},"_links":{"self":[{"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/posts\/1470","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/comments?post=1470"}],"version-history":[{"count":1,"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/posts\/1470\/revisions"}],"predecessor-version":[{"id":1471,"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/posts\/1470\/revisions\/1471"}],"wp:attachment":[{"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/media?parent=1470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/categories?post=1470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestdedicatedwebhostingserver.com\/blog\/wp-json\/wp\/v2\/tags?post=1470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}