From 92ba852fc5c7acf2be307cf14ae86a500329bac5 Mon Sep 17 00:00:00 2001 From: Xiao-no-love <140927721+Xiao-no-love@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:05:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(payload):=20per-id=20=E8=AF=8A=E6=96=AD?= =?UTF-8?q?=E6=98=8E=E7=BB=86=EF=BC=8C=E6=97=A5=E5=BF=97/=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=BE=93=E5=87=BA=20top-15=20payload=20=E6=9D=A5?= =?UTF-8?q?=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PayloadDiagnostics.snapshot() 追加 topIds():按 received 降序取前15个 payload id - 格式 id(r收/c完/f失/x消/e期/rej拒),供定位哪些 mod 频繁触发 enqueueWork - 触发路径自动覆盖:/dimensionalripper status 命令 + slowPhase 慢相位日志 - 本改动纯诊断,不改任何执行时序,无性能影响(仅在 snapshot 调用时排序) --- .../core/compat/PayloadDiagnostics.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/modzuozhi/core/compat/PayloadDiagnostics.java b/src/main/java/dev/modzuozhi/core/compat/PayloadDiagnostics.java index 6e84556..2539275 100644 --- a/src/main/java/dev/modzuozhi/core/compat/PayloadDiagnostics.java +++ b/src/main/java/dev/modzuozhi/core/compat/PayloadDiagnostics.java @@ -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;i0)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);} }