世界生成卡死看门狗

基本信息

属性 值
实现类 com.cardinalstar.cubicchunks.worldgen.WorldgenHangWatchdog
超时阈值配置 cubicchunks.config.worldgen_watchdog_time_limit,默认 10000 ms
JVM 开关 系统属性 cubicchunks.wgen_hang_watchdog,默认 "true"
崩溃报告标签 CubicChunks WorldGen Hang Watchdog samples
监控点 VanillaWorldGenerator 的 4 处 startWorldGen() / endWorldGen()

功能

CubicChunks 用一个独立守护线程监控单个区块的生成耗时,超过阈值就让服务器崩溃并附带采样信息,便于定位"某个世界生成模组在立方区块上卡死"。

  • WorldgenHangWatchdog.ENABLED 由系统属性 cubicchunks.wgen_hang_watchdog 决定,默认启用(worldgen/WorldgenHangWatchdog.java:37-38)
  • 看门狗是单例 INSTANCE(:40),自建线程 thread = init()(:42),崩溃信息存在 private static volatile String crashInfo(:46),经 getCrashInfo() 暴露(:54)
  • 生成开始/结束由 startWorldGen()(:58)与配套的 endWorldGen() 标记;VanillaWorldGenerator 在两个生成阶段各调一次,计 4 个调用点:startWorldGen() 在 :262 与 :351,endWorldGen() 在 :338 与 :402
  • 主类在 preInit 里把看门狗注册为 FML 崩溃回调(CubicChunks.java:129-151),标签为 CubicChunks WorldGen Hang Watchdog samples,无数据时返回 (no data)

阈值本身来自 GTNHLib 配置项 worldgenWatchdogTimeLimit(CubicChunksConfig.java:133),注释写明"单个区块在原版兼容生成器中允许消耗的最大毫秒数,超过则强制崩溃"(:131-132)。

VanillaWorldGenerator 内部有 5 处 catch (Throwable ...)(worldgen/VanillaWorldGenerator.java)。这些是生成器的容错分支(跳过单个失败的结构/地形),不是空 catch——仓内全部 3 处真正的空 catch 分别是 util/JourneyMapRenderGuard.java:18、util/CompatHandler.java:132 与 util/CompatHandler.java:264,均为良性探测(反射 Class.forName 失败即跳过)。

数值

数值名 值 来源
默认超时阈值 10000 ms CubicChunksConfig.java:133
看门狗默认开关 系统属性 cubicchunks.wgen_hang_watchdog 默认 "true" WorldgenHangWatchdog.java:37-38
崩溃回调无数据时返回值 (no data) CubicChunks.java 的 ICrashCallable.call()

交互

触发 行为
单个区块生成超过阈值 服务器强制崩溃,崩溃报告附 CubicChunks WorldGen Hang Watchdog samples 采样
启动 JVM 时加 -Dcubicchunks.wgen_hang_watchdog=false 关闭看门狗,不再因生成超时崩溃
生成正常完成 看门狗重置计时,不影响正常游玩

相关条目