From accd0fae3f3bb1f6eff04281886a9e3d27814144 Mon Sep 17 00:00:00 2001 From: xmz7891 Date: Wed, 7 Oct 2026 21:10:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=20A=20=E7=BB=84=EF=BC=88?= =?UTF-8?q?=E5=8F=97=E6=8E=A7=E5=AF=B9=E7=85=A7=EF=BC=89=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=9A39=20=E5=88=86=E9=92=9F=20100%=20=E5=8F=AF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户要求停掉智能体,所以 A/B 对照只跑完了 A 组就收尾。 A 组数据(quic 8 + h2 2)是迄今最好的一段: 可用率 142/142 = 100.00% 耗时 最小 878 中位 1270 P90 2375 P99 4010 最大 8119 ms P99 从 2 小时长测的 14242ms 降到 4010ms。 同时段连接数(36 个采样点): QUIC: 最低 5 最高 8 平均 7.2 分布 {8条:21, 7条:8, 6条:1, 5条:6} HTTP/2: 最低 2 最高 2 QUIC 塌陷(<=2 条): 0 次 **结论:QUIC 塌陷是间歇性的,不是每小时必发生。** 20:30~21:09 这段一次没塌;早些时候那 1 小时 44 分里塌了 2 次 (17:31、17:57)。这解释了短样本看到 100% 的原因 —— 不是数据好看,是那段确实没遇到链路抖动。 B 组(quic 6 + h2 4)没跑成,所以"要不要把 h2 提到 4 条" 这个问题本轮没有答案。但已有的证据(塌陷时 h2=2 从没掉到 0) 说明当前配置的兜底是够的。 顺带:这轮还把设备上的隧道配置确认回最终值(quic8 + h2 2, 两个 unit 都 active,实测 8+2=10 条),并停掉了后台对照脚本。 --- _build/_cmsg16.txt | 27 ++++++++++++ _build/rp_restore_A.sh | 45 +++++++++++++++++++ _build/rp_switch_B.sh | 72 +++++++++++++++++++++++++++++++ _build/wrap_up.sh | 45 +++++++++++++++++++ _tests/shots/3-自定义640x400.png | Bin 3215 -> 12479 bytes docs/优化实测数据.md | 19 +++++++- 6 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 _build/_cmsg16.txt create mode 100644 _build/rp_restore_A.sh create mode 100644 _build/rp_switch_B.sh create mode 100644 _build/wrap_up.sh diff --git a/_build/_cmsg16.txt b/_build/_cmsg16.txt new file mode 100644 index 0000000..d8b2285 --- /dev/null +++ b/_build/_cmsg16.txt @@ -0,0 +1,27 @@ +补充 A 组(受控对照)的数据:39 分钟 100% 可用 + +用户要求停掉智能体,所以 A/B 对照只跑完了 A 组就收尾。 +A 组数据(quic 8 + h2 2)是迄今最好的一段: + + 可用率 142/142 = 100.00% + 耗时 最小 878 中位 1270 P90 2375 P99 4010 最大 8119 ms + +P99 从 2 小时长测的 14242ms 降到 4010ms。 + +同时段连接数(36 个采样点): + QUIC: 最低 5 最高 8 平均 7.2 + 分布 {8条:21, 7条:8, 6条:1, 5条:6} + HTTP/2: 最低 2 最高 2 + QUIC 塌陷(<=2 条): 0 次 + +**结论:QUIC 塌陷是间歇性的,不是每小时必发生。** +20:30~21:09 这段一次没塌;早些时候那 1 小时 44 分里塌了 2 次 +(17:31、17:57)。这解释了短样本看到 100% 的原因 —— +不是数据好看,是那段确实没遇到链路抖动。 + +B 组(quic 6 + h2 4)没跑成,所以"要不要把 h2 提到 4 条" +这个问题本轮没有答案。但已有的证据(塌陷时 h2=2 从没掉到 0) +说明当前配置的兜底是够的。 + +顺带:这轮还把设备上的隧道配置确认回最终值(quic8 + h2 2, +两个 unit 都 active,实测 8+2=10 条),并停掉了后台对照脚本。 diff --git a/_build/rp_restore_A.sh b/_build/rp_restore_A.sh new file mode 100644 index 0000000..ed6b36d --- /dev/null +++ b/_build/rp_restore_A.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# 恢复成 A 组(quic 8 + http2 2)—— task-3 要求跑完保持现状 +set -u + +MAIN=/etc/systemd/system/lanremote-tunnel.service +H2=/etc/systemd/system/lanremote-tunnel-h2.service + +echo "════════ 恢复 quic 8 + http2 2 ════════" +sed -i 's/--ha-connections [0-9]*/--ha-connections 8/' "$MAIN" +sed -i 's/--ha-connections [0-9]*/--ha-connections 2/' "$H2" +systemctl daemon-reload +systemctl restart lanremote-tunnel +sleep 2 +systemctl restart lanremote-tunnel-h2 +echo " 主: $(grep -oE '\-\-protocol [a-z0-9]+|\-\-ha-connections [0-9]+|\-\-metrics [0-9.:]+' "$MAIN" | tr '\n' ' ')" +echo " 副: $(grep -oE '\-\-protocol [a-z0-9]+|\-\-ha-connections [0-9]+|\-\-metrics [0-9.:]+' "$H2" | tr '\n' ' ')" + +echo +echo "════════ 等连接建齐 ════════" +for i in $(seq 1 40); do + sleep 4 + q=$(curl -s --max-time 5 http://127.0.0.1:20241/metrics 2>/dev/null | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') + h=$(curl -s --max-time 5 http://127.0.0.1:20242/metrics 2>/dev/null | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') + q=${q:-0}; h=${h:-0} + [ $((q + h)) -ge 8 ] && break +done +echo " quic=$q http2=$h 合计=$((q + h))" + +echo +echo "════════ 公网确认 ════════" +for i in $(seq 1 15); do + c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 -H 'User-Agent: LanRemote/1.8.2' https://relay.xxmxxs.top/v1/health) + echo " 第 $i 次: $c" + [ "$c" = "200" ] && break + sleep 3 +done + +echo +echo "════════ 其他配置复核 ════════" +echo " MTU: $(cat /sys/class/net/wlan0/mtu)" +iptables -t mangle -S OUTPUT 2>/dev/null | grep TCPMSS | sed 's/^/ /' +echo " watchdog: $(systemctl is-active lanremote-watchdog.timer) $(wc -l < /root/lanremote-relay/watchdog.sh) 行" +grep -E '^THRESHOLD' /root/lanremote-relay/watchdog.sh | sed 's/^/ /' +echo " relay 长轮询: $(grep -oE 'RELAY_POLL=[0-9]+' /etc/systemd/system/lanremote-relay.service 2>/dev/null)" +echo " relay 版本: $(curl -s --max-time 10 http://127.0.0.1:8080/v1/health | python3 -c 'import sys,json; print(json.load(sys.stdin).get("version"))' 2>/dev/null)" diff --git a/_build/rp_switch_B.sh b/_build/rp_switch_B.sh new file mode 100644 index 0000000..a4c7c90 --- /dev/null +++ b/_build/rp_switch_B.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# 切到 B 组(quic6 + h2 4)并起 75 分钟测量。 +# +# 为什么 75 分钟而不是 45: +# A 组的 45 分钟新鲜数据里**一次塌陷都没抓到**(塌陷率约 2.2%, +# 45 分钟窗口的命中概率只有约 60%)。拉长到 75 分钟把概率提到 ~80%。 +# +# 注意:这次改配置会重启两个隧道实例(约 26 秒不可用), +# 用户可能在用手表,所以**一次改到位**,跑完立刻恢复成 A。 +set -u + +MAIN=/etc/systemd/system/lanremote-tunnel.service +H2=/etc/systemd/system/lanremote-tunnel-h2.service +BAK=/root/ratio2.bak.$(date +%s) +cp -a "$MAIN" "$BAK.main" +cp -a "$H2" "$BAK.h2" + +echo "════════ 1. 等 A 组跑完 ════════" +for i in $(seq 1 40); do + if ! pgrep -f 'rpab.sh A' > /dev/null 2>&1; then + echo " A 组已结束" + break + fi + sleep 10 +done +pgrep -af 'rpab.sh' | sed 's/^/ 还在跑: /' || echo " 没有测试在跑" + +echo +echo "════════ 2. 切到 B 组:quic 6 + http2 4 ════════" +sed -i 's/--ha-connections [0-9]*/--ha-connections 6/' "$MAIN" +sed -i 's/--ha-connections [0-9]*/--ha-connections 4/' "$H2" +systemctl daemon-reload +systemctl restart lanremote-tunnel +sleep 2 +systemctl restart lanremote-tunnel-h2 +echo " 主: $(grep -oE '\-\-protocol [a-z0-9]+|\-\-ha-connections [0-9]+' "$MAIN" | tr '\n' ' ')" +echo " 副: $(grep -oE '\-\-protocol [a-z0-9]+|\-\-ha-connections [0-9]+' "$H2" | tr '\n' ' ')" + +echo +echo "════════ 3. 等连接建齐 ════════" +for i in $(seq 1 40); do + sleep 4 + q=$(curl -s --max-time 5 http://127.0.0.1:20241/metrics 2>/dev/null | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') + h=$(curl -s --max-time 5 http://127.0.0.1:20242/metrics 2>/dev/null | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') + q=${q:-0}; h=${h:-0} + [ $((q + h)) -ge 8 ] && break +done +echo " quic=$q http2=$h 合计=$((q + h))(等了约 $((i * 4)) 秒)" + +echo +echo "════════ 4. 公网确认 ════════" +for i in $(seq 1 15); do + c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 -H 'User-Agent: LanRemote/1.8.2' https://relay.xxmxxs.top/v1/health) + echo " 第 $i 次: $c" + [ "$c" = "200" ] && break + sleep 3 +done + +echo +echo "════════ 5. 起 B 组 75 分钟 ════════" +if pgrep -f 'rpab.sh B' > /dev/null 2>&1; then + echo " 已经在跑,跳过" +else + cd /root && setsid bash /root/rpab.sh B 75 < /dev/null > /root/ab_B.out 2>&1 & + disown 2>/dev/null || true + sleep 5 +fi +echo " 进程: $(pgrep -af 'rpab.sh B' | head -1)" +echo " 已写入:$(wc -l < /root/ab_B_health.tsv 2>/dev/null || echo 0) 条" +echo +echo " 备份: $BAK.main $BAK.h2" +echo " 跑完后用 /root/rp_restore_A.sh 恢复成 quic8+h2 2" diff --git a/_build/wrap_up.sh b/_build/wrap_up.sh new file mode 100644 index 0000000..906ad2f --- /dev/null +++ b/_build/wrap_up.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# 收尾:停掉 A/B 对照脚本,确认隧道配置是最终值 +set -u + +echo " ── 1. 停掉对照脚本 ──" +pkill -f 'rpab.sh' 2>/dev/null && echo " 已停 rpab.sh" || echo " (本来就没在跑)" +pkill -f 'rp_long2h.sh' 2>/dev/null && echo " 已停 rp_long2h.sh" || echo " (本来就没在跑)" +sleep 1 +echo " 剩余相关进程: $(pgrep -cf 'rpab|rp_long2h' 2>/dev/null || echo 0)" + +echo +echo " ── 2. 确认隧道配置是最终采用的(quic8 + h2 2)──" +for s in lanremote-tunnel lanremote-tunnel-h2; do + cfg=$(grep -oE -- '--protocol [a-z0-9]+|--ha-connections [0-9]+' \ + "/etc/systemd/system/$s.service" 2>/dev/null | tr '\n' ' ') + printf " %-24s %-40s %s\n" "$s" "$cfg" "$(systemctl is-active $s)" +done +if grep -q 'ha-connections 4' /etc/systemd/system/lanremote-tunnel-h2.service 2>/dev/null; then + echo " ⚠ B 组配置还挂着(h2 4 条),改回 2 条" + sed -i 's/--ha-connections 4/--ha-connections 2/' /etc/systemd/system/lanremote-tunnel-h2.service + systemctl daemon-reload + systemctl restart lanremote-tunnel-h2 + sleep 6 + echo " 改完: $(grep -oE -- '--ha-connections [0-9]+' /etc/systemd/system/lanremote-tunnel-h2.service)" +else + echo " ✓ 已经是最终配置" +fi + +echo +echo " ── 3. 连上几条 ──" +for p in 20241 20242; do + n=$(curl -s --max-time 4 "http://127.0.0.1:$p/metrics" 2>/dev/null \ + | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') + printf " 端口 %s -> %s 条\n" "$p" "${n:-读不到}" +done + +echo +echo " ── 4. 公网自检 ──" +curl -s --max-time 20 -o /dev/null -w ' HTTP %{http_code} %{time_total}s\n' \ + -H 'User-Agent: LanRemote/1.8.2' https://relay.xxmxxs.top/v1/health + +echo +echo " ── 5. 保留的数据文件(不删,以后还能看)──" +ls -la --time-style=+%H:%M /root/ab_A_health.tsv /root/ab_A_conns.tsv /root/ab_A_res.tsv 2>/dev/null | awk '{printf " %s %s %s\n", $7, $6, $5}' || echo " (没有)" +echo " A 组样本: $(wc -l < /root/ab_A_health.tsv 2>/dev/null || echo 0)" diff --git a/_tests/shots/3-自定义640x400.png b/_tests/shots/3-自定义640x400.png index 4e389393363f0ae725fbe6eb0fbf003bfb0ecd05..3a527d4e986296b63b18e2150058fa39b35db966 100644 GIT binary patch literal 12479 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 F{|gO?mXH7d literal 3215 zcmeH~Yf#fy8pcl&5agn?ZVM=Zx=yieKu}y@Bogq35)CK{6$%LgvIr!&+`=U!ZlH`! zS=1N;BQYwAVbnh;5D8!|E@&)rkz0^UxX4BmAcR}w7Q&|ctuwn@Kh*uy56_o(=A1d_ z_nvv5=UfiN`B|E6H3I-x9y@yI6aa7<05FLu+)xoZ;PL>l2tIbm_cXawE$?82$0DV( z@9HsK$IpH9^(TkQ{ZFbeSI&M#x2pKU`Hnl*FKPUU|83&4$lx;%om0vR%%7@GvGckP zHx!?V4K}v^{0INwJ74bZjN2og-r=#Odv7A&jq}sHf8Ok4UGNa9S4$tK=tWu6J|qRbjH;_IxML+6@TldyrJ>`#C;4 zg0k33r*q^7EoamgT<^01c6||m%#9jXrDW#%`I0oaSoKfQ;tm9@zgFnxJbu+7_sk?T z*lk@YTxP48()%`uR|n~#!~{NmZK)f-Jfs9Kt5-M8B$D(oS=z!d9?sMiQ1(_RF9lW{gfi!MYu9uVq)UeSZ?0%>8RJv(JfNGHSJ(p z0-7`3P{xRtK=OfbU|7&jw6#R$YS()*Q9`(dWUQz>sMN#)z~CQQWnFF%f58#VY`*}N z2V`20iYRoL@@|f?fdBZ>qe#;Y%Hn~6Xd;n_wr3A3v9z#wzO102Kq}IzsrvZ|GWuF1 z?Qb>(-)o*EFX!R)IvsOF-rsLqklA@RBKuk$Usf3*%v7|nX30(xfZV;cU>9EWgwH>- z65Z28nkTmyS-gU{t^8Q2a$%Q5y-Ae_Bi!R+n4JH|-9I+l-}nFc@Ar4czhG>@u}1hn zsp;(eR2+G0~nb1R5{*H$cA>n+x;w8K4M=9Lm z)n{e1%DIvCi)$X}~^B_89uf=z>I(_l7 zBdec|?jN6B(k+UZ!)Czy8t8byk%!l~_?TGcHwlHT{hd`C$txQ-=c`Ttz}pVLk6duj6SvRT+eNVGSt29WnPHKKJ7L$ zP&3wy&@Me1;2=9WgT|D%zS2Bc(vl;S=!__As6V|4)U*jU{-W`}sZo?6Fg3D0f((>4 zu+9`ro7DZ0tU+W)-A_z-JofOoqX{(w2m&lG^uJDErjZasq08Dr%$jC0k>KDCD1VAm zbh`YQwll`la|LLoa3qLTm7^c+b_1>7A47!=mRs`D-^Wltf%xc@mTN9xXitS=>5+<4 zAI0bIFinb&as8^#;uow0#hr(hpVE^!PD)*dZ9eN+K51Ay^Fl)!ri}QN3duxD+!#IJ37M!yXuM0Y zC(T?z&DK#Yit!Gw>-Ix`>p;y(j2r7}c|#J{{v|dlgl)aP(j+|K5Jy|vy#bu>ZDOF} z84kg+Mraq8@|NW_oTHdxl%r>d=Kbm~!YzC>&Q4I3i`;)!7ciVNA@iQ-jWLV`N<-}& zeWzv^MoF#}sxQBjQJ3_wPWrc3dG^%CA#+CpIN#mG5QpKj*E46>+{V?T_pwwVB|UXn z$EDUjK3#;*(op<;n!w#}tCQksoyXts|V&=|~q>7qC_{M%5k^o#mR^8_a+=!644{ANV< zcu9yzS3dY<&cam}``)6B1~hT08TzRO^f13sMzJoE$#|dL9BBkH&gKVIRZvv``_ker zy0&$&kTU+_?m6o>fbhI3mo+DLY5vd<4%l~$Xkd#gFf!!Y|D@|#8VsCcWo>mfgkbn+ OfMbVohbj*c{`xOM&A{^j diff --git a/docs/优化实测数据.md b/docs/优化实测数据.md index 56e08c5..9dcd751 100644 --- a/docs/优化实测数据.md +++ b/docs/优化实测数据.md @@ -115,7 +115,24 @@ QUIC 建连要 6+ 个包往返;TCP 的 SYN 只有 3 个包、内核还按 1s/2 | 时段 | 样本 | 可用率 | 中位 | P90 | P99 | |---|---|---|---|---|---| | 25 分钟(双协议初测) | 50 | **100%** | 1505 | 3218 | 14245 | -| **1 小时 44 分(2 小时长测)** | **361** | **98.61%** | **1280** | **2386** | **14242** | +| **39 分钟(受控 A 组:quic 8 + h2 2)** | **142** | **100.00%** | **1270** | **2375** | **4010** | +| 1 小时 44 分(2 小时长测) | 361 | **98.61%** | 1280 | 2386 | 14242 | + +**A 组那 39 分钟是迄今最好的一段**:142 次请求全 200, +P99 从上一次的 14242ms 降到 **4010ms**。 + +同时段的连接数(36 个采样点): + +``` +QUIC: 最低 5 最高 8 平均 7.2 分布 {8条:21, 7条:8, 6条:1, 5条:6} +HTTP/2: 最低 2 最高 2 +QUIC 塌陷(<=2 条): 0 次 +``` + +**也就是说:QUIC 塌陷是间歇性的,不是每小时必发生。** +20:30~21:09 这一段一次都没塌;而当天早些时候那 1 小时 44 分里塌了 2 次 +(17:31、17:57)。这解释了为什么短样本的可用率会看到 100% —— +不是"数据好看",是那一段确实没遇到链路抖动。 > 长测原定 2 小时,实际跑到 1 小时 44 分就停了 —— > 设备在 19:11 换了网段(`192.168.10.105` → `192.168.2.156`),