#!/bin/bash # A/B 长测状态检查 set -u L=${1:-A} echo "════════ 进程 ════════" pgrep -af 'rpab.sh' | sed 's/^/ /' || echo " (没有在跑)" echo echo "════════ $L 组数据 ════════" for kind in health conns res; do f=/root/ab_${L}_${kind}.tsv if [ -f "$f" ]; then echo " $f: $(wc -l < "$f") 行" else echo " $f: 不存在" fi done echo echo " ── 健康样本 ──" if [ -f /root/ab_${L}_health.tsv ]; then n=$(grep -c . /root/ab_${L}_health.tsv) ok=$(awk -F'\t' '$2=="200"' /root/ab_${L}_health.tsv | wc -l) echo " $ok/$n = $(awk -v a="$ok" -v b="$n" 'BEGIN{if(b>0)printf "%.2f", a*100/b; else print 0}')%" echo " 状态码: $(awk -F'\t' '{print $2}' /root/ab_${L}_health.tsv | sort | uniq -c | tr '\n' ' ')" echo " 非200:" awk -F'\t' '$2!="200"{print " " $1 " 码=" $2 " " $3 "ms"}' /root/ab_${L}_health.tsv echo " 耗时: $(awk -F'\t' '$2=="200"{print $3}' /root/ab_${L}_health.tsv | sort -n | awk '{a[NR]=$1} END{if(NR==0){print "无"}else{printf "最小 %d 中位 %d P90 %d P99 %d 最大 %d", a[1], a[int(NR/2)+1], a[int(NR*0.9)+1], a[int(NR*0.99)+1], a[NR]}}')" fi echo echo " ── 连接数 ──" if [ -f /root/ab_${L}_conns.tsv ]; then tail -6 /root/ab_${L}_conns.tsv | sed 's/^/ /' echo " 总数分布:" awk -F'\t' 'NR>1 && $2 ~ /^[0-9]+$/ && $3 ~ /^[0-9]+$/ {print $2+$3}' \ /root/ab_${L}_conns.tsv | sort -n | uniq -c | sed 's/^/ /' echo " 总数<=3 的次数: $(awk -F'\t' 'NR>1 && $2 ~ /^[0-9]+$/ && $3 ~ /^[0-9]+$/ && ($2+$3)<=3' /root/ab_${L}_conns.tsv | wc -l)" fi echo echo " ── 内存/CPU(最近 5 条)──" if [ -f /root/ab_${L}_res.tsv ]; then echo " 时间 QUIC内存KB H2内存KB QUIC_CPU H2_CPU 已用MB 可用MB 负载" tail -5 /root/ab_${L}_res.tsv | sed 's/^/ /' fi echo echo "════════ 输出日志尾部 ════════" tail -6 /root/ab_${L}.out 2>/dev/null | sed 's/^/ /' || echo " (无)" echo echo "════════ 折叠分析(如果有 python3)════════" if [ -f /root/ab_${L}_conns.tsv ] && [ -f /root/ab_${L}_health.tsv ]; then echo " (在 PC 上跑 rp_collapse.py 分析)" fi