堆锤

堆锤

确定性Minecraft服务器压力测试与内存驻留回归检测。

HeapHammer

大型整合包中的内存泄漏通常在服务器真实运行一两天后才会显现——比如有玩家用鞘翅飞行、刷怪塔不间断运行、机器持续循环工作。等真正崩溃时,你早已丢失了能定位泄漏源头的上下文。

HeapHammer 能按需复现同类负载并将其压缩至大约两分钟内完成。它会加载区块、生成并移除实体、放置并破坏方块实体,走的都是真实玩家会触发的代码路径,然后检查内存是否回落或持续攀升。它会给出明确结果:通过(内存已回收)、通过(平台期)(初始缓存预热后趋于稳定)、或 可疑(内存一轮轮持续增长——这就是泄漏)。

它仅需在服务端安装,你的玩家无需安装任何东西。

它能捕获的问题类型

  • 卸载区块后仍保留区块数据的小地图或领地类模组
  • 生物消失后未正确清理的实体追踪或伤害显示类模组
  • 机器被破坏后未正确注销的科技类模组
  • 仅在两个特定模组同时运行时才会出现的泄漏——这类问题通常最难发现

你无需进行任何针对特定模组的配置,因为它通过给原版服务器施加负载来检测,而非直接针对模组本身。

可安全运行在实时服务器上

它只处理自己的测试区块和实体,绝不触碰玩家的建筑或世界出生点。所有操作每 tick 有最高 15ms 的预算,因此不会造成卡顿或触发你的看门狗。如果想提前停止测试,使用 /hh stop 或 /hh cleanup 立即清理一切。

使用方法 - 快速开始

将 jar 文件放入服务器的 mods 文件夹,然后从控制台或以管理员身份在游戏内执行:

/hh doctor
/hh run chunks --iterations=5 --batch=10 --radius=8 --strategy=spiral
/hh report show last

如果你在添加新模组后排查泄漏,可在添加前后各运行一次,然后用 /hh report diff 对比两次结果,它会显示哪个模组改变了数据。

其他命令:hh status、hh stop、hh cleanup、hh replay <运行ID>、hh diagnostics histogram、hh diagnostics heapdump。所有命令需操作员等级 2 或以上,若使用 Fabric Permissions API 或 LuckPerms 也同样支持。

该项目已通过 86 项自动化测试,并在真实专用服务器上验证:干净安装版本每周期内存保留 0.75 MB(无误报),而故意植入泄漏的版本每周期保留 10.56 MB。它还捕获了一个仅在两个特定模组同时运行时才出现的泄漏——这类问题通过逐一测试模组很难发现。

完整命令列表

命令 说明
hh doctor 服务器就绪状态、区块/票证健康检查
hh run chunks / entities / blockentities 运行压力负载测试
hh status / hh stop / hh cleanup 监控与中止
hh report show <ID或last> 内存保留斜率、R²、判定结论
hh report diff <运行A> <运行B> 对比两次运行以定位性能退化
hh replay <运行ID> 重放完全相同的操作序列
hh diagnostics histogram / heapdump JVM 类直方图或 .hprof 转储

支持版本

Forge:1.7.10、1.12.2。Fabric:1.16.5、1.18.2、1.19.2、1.20.1、1.21.1、1.21.4。NeoForge:1.21.1。

许可证: LGPL-3.0。