世界生成卡死看门狗
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | 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 |
关闭看门狗,不再因生成超时崩溃 |
| 生成正常完成 | 看门狗重置计时,不影响正常游玩 |
相关条目
- 配置文件 -
worldgen_watchdog_time_limit配置项 - Cubic Vanilla 装饰器 - 看门狗监控的生成流程