#!/bin/bash # 看 relay-stability 的 30 次长轮询结果(目标 2) set -u echo " ── 汇总文件 ──" [ -f /root/rp_poll30_summary.txt ] && cat /root/rp_poll30_summary.txt | sed 's/^/ /' echo echo " ── 明细(前 5 行看格式)──" [ -f /root/rp_poll30.tsv ] && head -5 /root/rp_poll30.tsv | sed 's/^/ /' echo echo " ── 自己再算一遍 ──" python3 - <<'PYEOF' from pathlib import Path p = Path("/root/rp_poll30.tsv") if not p.is_file(): print(" 没有文件") raise SystemExit(0) rows = [] for line in p.read_text(encoding="utf-8", errors="replace").splitlines(): line = line.strip() if not line: continue parts = [x.strip() for x in line.replace(",", "\t").split("\t") if x.strip()] if not parts: continue # 找出状态码和耗时 code = None ms = None for x in parts: if x in ("200", "502", "530", "000", "401", "504"): code = x elif x.replace(".", "").isdigit() and "." not in x and len(x) >= 4: try: v = int(x) if 500 <= v <= 300000 and ms is None: ms = v except ValueError: pass if code: rows.append((code, ms)) if not rows: print(" 解析不出样本,原始内容:") print(p.read_text(encoding="utf-8", errors="replace")[:400]) raise SystemExit(0) total = len(rows) ok = sum(1 for c, _m in rows if c == "200") print(" 样本 %d,成功 %d,可用率 %.1f%%" % (total, ok, ok * 100.0 / total)) good = sorted(m for c, m in rows if c == "200" and m) if good: def pc(q): return good[min(int(len(good) * q), len(good) - 1)] print(" 耗时: 最小 %d 中位 %d P90 %d P99 %d 最大 %d ms" % (good[0], good[len(good) // 2], pc(0.9), pc(0.99), good[-1])) print(" (理想值 = 60000 + 隧道开销;>90000 的算异常长尾)") outliers = [m for m in good if m > 90000] print(" 异常长尾(>90 秒): %d 次 %s" % (len(outliers), outliers)) PYEOF