
堆锤
确定性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。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。