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:
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);}
|
||||
}
|
||||
Reference in new issue
Block a user