#!/bin/bash # 查还有哪些内核网络调优可用(只读) set -u echo "════════ 1. 排队规则(qdisc)候选 ════════" echo " 当前: $(sysctl -n net.core.default_qdisc)" echo " 内核里有没有 fq / fq_codel / cake:" find /lib/modules/$(uname -r)/kernel/net/sched/ -name '*.ko*' 2>/dev/null \ | xargs -n1 basename 2>/dev/null | grep -iE 'fq|codel|cake|htb|tbf' | head -10 | sed 's/^/ /' echo " 已加载的相关模块:" lsmod 2>/dev/null | grep -iE 'fq|codel|cake|sch_' | sed 's/^/ /' || echo " (没有)" echo " ---" echo " 试加载 fq_codel(-n = 只检查不真加载):" modprobe -n sch_fq_codel 2>&1 | head -2 | sed 's/^/ /' echo " 试加载 fq:" modprobe -n sch_fq 2>&1 | head -2 | sed 's/^/ /' echo echo "════════ 2. 现在的 qdisc 长什么样 ════════" tc qdisc show dev wlan0 2>/dev/null | sed 's/^/ /' || echo " (tc 没装)" echo echo "════════ 3. TCP 重传相关的可调项(当前值)════════" for k in tcp_retries1 tcp_retries2 tcp_rto_min tcp_rto_max tcp_recovery \ tcp_early_retrans tcp_fack tcp_thin_linear_timeouts tcp_abort_on_overflow \ tcp_limit_output_bytes tcp_moderate_rcvbuf tcp_autocorking; do v=$(sysctl -n net.ipv4.$k 2>/dev/null) [ -n "$v" ] && printf " %-38s = %s\n" "$k" "$v" done echo echo "════════ 4. 这些项的合法范围 ════════" ls /proc/sys/net/ipv4/ 2>/dev/null | grep -E '^tcp_(retries|rto|recovery|early|fack|thin|abort|limit|moderate|autocork)' | sed 's/^/ /' echo echo "════════ 5. 丢包/重传的实时增量(10 秒采样)════════" a=$(netstat -s 2>/dev/null | grep -E 'TCPTimeouts|segments retransmitted|TCPLostRetransmit' | awk '{s+=$1} END {print s}') sleep 10 b=$(netstat -s 2>/dev/null | grep -E 'TCPTimeouts|segments retransmitted|TCPLostRetransmit' | awk '{s+=$1} END {print s}') echo " 10 秒内新增重传/超时相关计数: $((b - a))" echo echo "════════ 6. 基线测量还在跑吗 ════════" pgrep -af 'bench.sh' | head -2 | sed 's/^/ /' || echo " 已结束" if [ -f /root/bench_baseline.txt ]; then echo " 已写入的行数: $(wc -l < /root/bench_baseline.txt)" echo " 最近几行:" tail -6 /root/bench_baseline.txt | sed 's/^/ /' fi