feat(payload): per-id 诊断明细,日志/命令输出 top-15 payload 来源

- PayloadDiagnostics.snapshot() 追加 topIds():按 received 降序取前15个 payload id
- 格式 id(r收/c完/f失/x消/e期/rej拒),供定位哪些 mod 频繁触发 enqueueWork
- 触发路径自动覆盖:/dimensionalripper status 命令 + slowPhase 慢相位日志
- 本改动纯诊断,不改任何执行时序,无性能影响(仅在 snapshot 调用时排序)
This commit is contained in:
Xiao-no-love committed 2026-10-13 18:05:55 +08:00
1 parent a3b0655072
commit 92ba852fc5
1 file changed
+17 -1
@@ -69,8 +69,24 @@ public final class PayloadDiagnostics {
return "payloads: phase="+MainThreadPhaseCoordinator.phase(server)+" received="+received+" completed="+completed
+" failed="+failed+" cancelled="+cancelled+" expired="+expired+" rejected="+rejected
+" pending="+s.pending.size()+" oldestMs="+(System.nanoTime()-oldest)/1_000_000.0
+" batches="+s.batches+" waitMs="+s.waitMs+" actionMs="+s.actionMs+" ids="+s.ids.size()+" other="+Arrays.toString(s.other)+" recent="+s.recent;
+" batches="+s.batches+" waitMs="+s.waitMs+" actionMs="+s.actionMs+" ids="+s.ids.size()+" other="+Arrays.toString(s.other)+" recent="+s.recent
+topIds(s);
}
}
/** Top payload ids by received count; bounded output for logs (who floods enqueueWork). */
private static String topIds(Stats s) {
if(s.ids.isEmpty()) return " top=[]";
var top=s.ids.entrySet().stream()
.sorted((a,b)->Long.compare(b.getValue()[0],a.getValue()[0]))
.limit(15).toList();
StringBuilder sb=new StringBuilder(" top=[");
for(int i=0;i<top.size();i++) {
var e=top.get(i);long[] v=e.getValue();
if(i>0)sb.append(' ');
sb.append(e.getKey()).append("(r").append(v[0]).append("/c").append(v[1]).append("/f").append(v[2])
.append("/x").append(v[3]).append("/e").append(v[4]).append("/rej").append(v[5]).append(')');
}
return sb.append(']').toString();
}
public static void clear(MinecraftServer server){STATS.remove(server);}
}