精简参数:老版风格+自动内存计算缓冲区
This commit is contained in:
372
bbr.sh
372
bbr.sh
@@ -1,202 +1,196 @@
|
||||
#!/bin/bash
|
||||
# VPS 网络极限优化脚本 - 自动检测配置,发挥最大速度
|
||||
# https://github.com/xmg0828888/tcp-bbr
|
||||
# BBR Blast Smooth v2 - 自动识别系统/内存智能调优版
|
||||
# 支持 Debian 11/12/13, Ubuntu 20.04/22.04/24.04
|
||||
# 根据内存大小自动调整缓冲区参数 🚀
|
||||
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[0;33m'; CYAN='\033[0;36m'; NC='\033[0m'
|
||||
[ "$(id -u)" != "0" ] && echo -e "${RED}请使用 root 运行${NC}" && exit 1
|
||||
set -e
|
||||
|
||||
CORES=$(nproc)
|
||||
MEM_MB=$(free -m | awk '/Mem:/{print $2}')
|
||||
MEM_BYTES=$((MEM_MB * 1024 * 1024))
|
||||
IFACE=$(ip route | awk '/default/{print $5}' | head -1)
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
show_info() {
|
||||
echo -e "${CYAN}╔══════════════════════════════════╗${NC}"
|
||||
echo -e "${CYAN}║ VPS 网络极限优化脚本 v1.0 ║${NC}"
|
||||
echo -e "${CYAN}╚══════════════════════════════════╝${NC}"
|
||||
echo -e "CPU: ${YELLOW}${CORES} 核${NC} 内存: ${YELLOW}${MEM_MB}MB${NC} 内核: ${YELLOW}$(uname -r)${NC}"
|
||||
echo -e "网卡: ${YELLOW}${IFACE}${NC}"
|
||||
local algo=$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null)
|
||||
local qdisc=$(sysctl -n net.core.default_qdisc 2>/dev/null)
|
||||
echo -e "拥塞算法: ${YELLOW}${algo}${NC} 队列: ${YELLOW}${qdisc}${NC}"
|
||||
if [ "$algo" = "bbr" ]; then
|
||||
echo -e "BBR: ${GREEN}✓ 已开启${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} BBR Blast Smooth v2 智能调优版${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 检测系统
|
||||
detect_os() {
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
OS=$ID
|
||||
VER=$VERSION_ID
|
||||
else
|
||||
echo -e "BBR: ${RED}✗ 未开启${NC}"
|
||||
echo -e "${RED}❌ 无法识别系统${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 根据内存自动计算缓冲区大小
|
||||
calc_buffers() {
|
||||
if [ $MEM_MB -le 512 ]; then
|
||||
RMEM_MAX=8388608; WMEM_MAX=8388608; NETDEV_BUDGET=300
|
||||
TCP_MEM="65536 131072 262144"; TCP_RMEM="4096 87380 4194304"; TCP_WMEM="4096 65536 4194304"
|
||||
BACKLOG=1000; SOMAXCONN=1024; CONNTRACK=16384
|
||||
elif [ $MEM_MB -le 2048 ]; then
|
||||
RMEM_MAX=16777216; WMEM_MAX=16777216; NETDEV_BUDGET=600
|
||||
TCP_MEM="131072 262144 524288"; TCP_RMEM="4096 87380 8388608"; TCP_WMEM="4096 65536 8388608"
|
||||
BACKLOG=2000; SOMAXCONN=2048; CONNTRACK=65536
|
||||
elif [ $MEM_MB -le 8192 ]; then
|
||||
RMEM_MAX=33554432; WMEM_MAX=33554432; NETDEV_BUDGET=1200
|
||||
TCP_MEM="262144 524288 1048576"; TCP_RMEM="4096 87380 16777216"; TCP_WMEM="4096 65536 16777216"
|
||||
BACKLOG=5000; SOMAXCONN=4096; CONNTRACK=131072
|
||||
case "$OS" in
|
||||
debian)
|
||||
if [[ "$VER" =~ ^(11|12|13)$ ]]; then
|
||||
echo -e "${GREEN}✓ 检测到 Debian $VER${NC}"
|
||||
else
|
||||
RMEM_MAX=67108864; WMEM_MAX=67108864; NETDEV_BUDGET=2400
|
||||
TCP_MEM="524288 1048576 2097152"; TCP_RMEM="4096 87380 33554432"; TCP_WMEM="4096 65536 33554432"
|
||||
BACKLOG=10000; SOMAXCONN=8192; CONNTRACK=262144
|
||||
echo -e "${RED}❌ 仅支持 Debian 11/12/13${NC}"
|
||||
exit 1
|
||||
fi
|
||||
FILE_MAX=$((MEM_MB * 256))
|
||||
[ $FILE_MAX -lt 65535 ] && FILE_MAX=65535
|
||||
}
|
||||
|
||||
do_optimize() {
|
||||
calc_buffers
|
||||
echo -e "${GREEN}正在优化... (${MEM_MB}MB 内存方案)${NC}"
|
||||
|
||||
local CONF="/etc/sysctl.d/99-network-optimize.conf"
|
||||
cat > "$CONF" << EOF
|
||||
# === BBR 拥塞控制 ===
|
||||
net.core.default_qdisc = fq
|
||||
net.ipv4.tcp_congestion_control = bbr
|
||||
|
||||
# === 缓冲区 (基于 ${MEM_MB}MB 内存) ===
|
||||
net.core.rmem_max = ${RMEM_MAX}
|
||||
net.core.wmem_max = ${WMEM_MAX}
|
||||
net.core.rmem_default = 262144
|
||||
net.core.wmem_default = 262144
|
||||
net.ipv4.tcp_rmem = ${TCP_RMEM}
|
||||
net.ipv4.tcp_wmem = ${TCP_WMEM}
|
||||
net.ipv4.tcp_mem = ${TCP_MEM}
|
||||
net.ipv4.udp_mem = ${TCP_MEM}
|
||||
|
||||
# === 连接队列 ===
|
||||
net.core.netdev_max_backlog = ${BACKLOG}
|
||||
net.core.somaxconn = ${SOMAXCONN}
|
||||
net.ipv4.tcp_max_syn_backlog = ${SOMAXCONN}
|
||||
|
||||
# === TCP 快速回收 ===
|
||||
net.ipv4.tcp_tw_reuse = 1
|
||||
net.ipv4.tcp_fin_timeout = 15
|
||||
net.ipv4.tcp_keepalive_time = 300
|
||||
net.ipv4.tcp_keepalive_intvl = 30
|
||||
net.ipv4.tcp_keepalive_probes = 5
|
||||
net.ipv4.tcp_max_tw_buckets = 65535
|
||||
net.ipv4.tcp_max_orphans = 32768
|
||||
|
||||
# === TCP 性能 ===
|
||||
net.ipv4.tcp_fastopen = 3
|
||||
net.ipv4.tcp_mtu_probing = 1
|
||||
net.ipv4.tcp_slow_start_after_idle = 0
|
||||
net.ipv4.tcp_no_metrics_save = 1
|
||||
net.ipv4.tcp_window_scaling = 1
|
||||
net.ipv4.tcp_sack = 1
|
||||
net.ipv4.tcp_timestamps = 1
|
||||
net.ipv4.tcp_ecn = 0
|
||||
net.ipv4.tcp_syncookies = 1
|
||||
net.ipv4.tcp_adv_win_scale = 2
|
||||
net.core.netdev_budget = ${NETDEV_BUDGET}
|
||||
net.core.netdev_budget_usecs = 8000
|
||||
|
||||
# === 文件描述符 ===
|
||||
fs.file-max = ${FILE_MAX}
|
||||
fs.nr_open = ${FILE_MAX}
|
||||
|
||||
# === 连接跟踪 ===
|
||||
net.netfilter.nf_conntrack_max = ${CONNTRACK}
|
||||
|
||||
# === 其他 ===
|
||||
net.ipv4.ip_local_port_range = 1024 65535
|
||||
net.ipv4.ip_forward = 1
|
||||
net.ipv6.conf.all.forwarding = 1
|
||||
EOF
|
||||
|
||||
sysctl --system >/dev/null 2>&1
|
||||
|
||||
# 设置文件描述符限制
|
||||
if ! grep -q "# network-optimize" /etc/security/limits.conf 2>/dev/null; then
|
||||
cat >> /etc/security/limits.conf << EOF
|
||||
# network-optimize
|
||||
* soft nofile ${FILE_MAX}
|
||||
* hard nofile ${FILE_MAX}
|
||||
root soft nofile ${FILE_MAX}
|
||||
root hard nofile ${FILE_MAX}
|
||||
EOF
|
||||
;;
|
||||
ubuntu)
|
||||
if [[ "$VER" =~ ^(20.04|22.04|24.04)$ ]]; then
|
||||
echo -e "${GREEN}✓ 检测到 Ubuntu $VER${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 仅支持 Ubuntu 20.04/22.04/24.04${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 网卡队列优化
|
||||
if command -v ethtool &>/dev/null && [ -n "$IFACE" ]; then
|
||||
ethtool -G "$IFACE" rx 4096 tx 4096 2>/dev/null
|
||||
ethtool -K "$IFACE" tso on gso on gro on 2>/dev/null
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✓ 优化完成!${NC}"
|
||||
echo ""
|
||||
show_result
|
||||
}
|
||||
|
||||
show_result() {
|
||||
echo -e "${CYAN}=== 优化结果 ===${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}[ BBR 加速 ]${NC}"
|
||||
echo -e " 拥塞算法: $(sysctl -n net.ipv4.tcp_congestion_control)"
|
||||
echo -e " 队列调度: $(sysctl -n net.core.default_qdisc)"
|
||||
echo ""
|
||||
echo -e "${GREEN}[ TCP 调优 ]${NC}"
|
||||
echo -e " FastOpen: $(sysctl -n net.ipv4.tcp_fastopen)"
|
||||
echo -e " MTU探测: $(sysctl -n net.ipv4.tcp_mtu_probing)"
|
||||
echo -e " 窗口缩放: $(sysctl -n net.ipv4.tcp_window_scaling)"
|
||||
echo -e " SACK: $(sysctl -n net.ipv4.tcp_sack)"
|
||||
echo -e " Timestamps: $(sysctl -n net.ipv4.tcp_timestamps)"
|
||||
echo -e " tw_reuse: $(sysctl -n net.ipv4.tcp_tw_reuse)"
|
||||
echo -e " fin_timeout: $(sysctl -n net.ipv4.tcp_fin_timeout)s"
|
||||
echo -e " keepalive: $(sysctl -n net.ipv4.tcp_keepalive_time)s"
|
||||
echo -e " 慢启动: $(sysctl -n net.ipv4.tcp_slow_start_after_idle) (0=关闭)"
|
||||
echo ""
|
||||
echo -e "${GREEN}[ 缓冲区 ]${NC}"
|
||||
echo -e " rmem_max: $(( $(sysctl -n net.core.rmem_max) /1024/1024 ))MB"
|
||||
echo -e " wmem_max: $(( $(sysctl -n net.core.wmem_max) /1024/1024 ))MB"
|
||||
echo -e " tcp_rmem: $(sysctl -n net.ipv4.tcp_rmem)"
|
||||
echo -e " tcp_wmem: $(sysctl -n net.ipv4.tcp_wmem)"
|
||||
echo ""
|
||||
echo -e "${GREEN}[ 连接 ]${NC}"
|
||||
echo -e " backlog: $(sysctl -n net.core.netdev_max_backlog)"
|
||||
echo -e " somaxconn: $(sysctl -n net.core.somaxconn)"
|
||||
echo -e " 端口范围: $(sysctl -n net.ipv4.ip_local_port_range)"
|
||||
echo -e " 文件描述符: $(sysctl -n fs.file-max)"
|
||||
echo ""
|
||||
echo -e "${YELLOW}✓ 重启后永久生效,无需额外操作${NC}"
|
||||
}
|
||||
|
||||
do_restore() {
|
||||
echo -e "${YELLOW}正在恢复默认...${NC}"
|
||||
rm -f /etc/sysctl.d/99-network-optimize.conf
|
||||
sysctl --system >/dev/null 2>&1
|
||||
echo -e "${GREEN}✓ 已恢复默认配置${NC}"
|
||||
}
|
||||
|
||||
show_menu() {
|
||||
clear
|
||||
show_info
|
||||
echo "1. 一键优化 (BBR + 内核参数 + 缓冲区)"
|
||||
echo "2. 查看当前状态"
|
||||
echo "3. 恢复默认配置"
|
||||
echo "0. 退出"
|
||||
echo ""
|
||||
read -p "请选择 [0-3]: " choice
|
||||
case "$choice" in
|
||||
1) do_optimize ;;
|
||||
2) show_result ;;
|
||||
3) do_restore ;;
|
||||
0) exit 0 ;;
|
||||
*) echo -e "${RED}无效选择${NC}" ;;
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}❌ 不支持的系统: $OS${NC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
echo ""; read -p "按回车继续..." && show_menu
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
restore|disable) do_restore ;;
|
||||
status) show_info; show_result ;;
|
||||
menu) show_menu ;;
|
||||
*) show_info; do_optimize ;;
|
||||
esac
|
||||
# 检测内存并设置参数
|
||||
detect_memory() {
|
||||
# 获取总内存 (MB)
|
||||
TOTAL_MEM=$(free -m | awk '/^Mem:/{print $2}')
|
||||
echo -e "${GREEN}✓ 检测到内存: ${TOTAL_MEM}MB${NC}"
|
||||
|
||||
# 缓冲区 = 内存的 1/8,最小 8MB,最大 256MB
|
||||
BUF_MB=$(( TOTAL_MEM / 8 ))
|
||||
[ "$BUF_MB" -lt 8 ] && BUF_MB=8
|
||||
[ "$BUF_MB" -gt 256 ] && BUF_MB=256
|
||||
BUF_BYTES=$(( BUF_MB * 1024 * 1024 ))
|
||||
|
||||
if [ "$TOTAL_MEM" -lt 512 ]; then
|
||||
PROFILE="micro"
|
||||
echo -e "${YELLOW}→ 使用 Micro 配置 (极小内存优化)${NC}"
|
||||
elif [ "$TOTAL_MEM" -lt 1024 ]; then
|
||||
PROFILE="small"
|
||||
echo -e "${YELLOW}→ 使用 Small 配置 (小内存优化)${NC}"
|
||||
elif [ "$TOTAL_MEM" -lt 2048 ]; then
|
||||
PROFILE="medium"
|
||||
echo -e "${YELLOW}→ 使用 Medium 配置 (中等内存)${NC}"
|
||||
elif [ "$TOTAL_MEM" -lt 4096 ]; then
|
||||
PROFILE="large"
|
||||
echo -e "${YELLOW}→ 使用 Large 配置 (大内存)${NC}"
|
||||
else
|
||||
PROFILE="xlarge"
|
||||
echo -e "${YELLOW}→ 使用 XLarge 配置 (超大内存)${NC}"
|
||||
fi
|
||||
|
||||
RMEM_MAX=$BUF_BYTES
|
||||
WMEM_MAX=$BUF_BYTES
|
||||
TCP_RMEM="4096 87380 $BUF_BYTES"
|
||||
TCP_WMEM="4096 65536 $BUF_BYTES"
|
||||
echo -e "${YELLOW}→ 缓冲区: ${BUF_MB}MB${NC}"
|
||||
}
|
||||
|
||||
# 启用 BBR
|
||||
enable_bbr() {
|
||||
echo ""
|
||||
echo -e "${BLUE}==> 启用 BBR${NC}"
|
||||
modprobe tcp_bbr 2>/dev/null || true
|
||||
echo "tcp_bbr" > /etc/modules-load.d/bbr.conf
|
||||
echo -e "${GREEN}✓ BBR 模块已加载${NC}"
|
||||
}
|
||||
|
||||
# 备份原配置
|
||||
backup_config() {
|
||||
if [ -f /etc/sysctl.conf ]; then
|
||||
cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%Y%m%d%H%M%S)
|
||||
echo -e "${GREEN}✓ 已备份原配置${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 写入优化参数
|
||||
apply_config() {
|
||||
echo ""
|
||||
echo -e "${BLUE}==> 写入优化参数 (Profile: $PROFILE)${NC}"
|
||||
|
||||
# 移除旧的 BBR 配置
|
||||
sed -i '/# === BBR Blast Smooth/,/# === END BBR/d' /etc/sysctl.conf 2>/dev/null || true
|
||||
|
||||
cat >> /etc/sysctl.conf <<SYSCTL
|
||||
|
||||
# === BBR Blast Smooth v2 (Profile: $PROFILE) ===
|
||||
# 系统: $OS $VER | 内存: ${TOTAL_MEM}MB | 缓冲: ${BUF_MB}MB
|
||||
# 生成时间: $(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
# BBR 拥塞控制
|
||||
net.core.default_qdisc=fq
|
||||
net.ipv4.tcp_congestion_control=bbr
|
||||
|
||||
# 缓冲区 (内存/8 自动计算)
|
||||
net.core.rmem_max=$RMEM_MAX
|
||||
net.core.wmem_max=$WMEM_MAX
|
||||
net.ipv4.tcp_rmem=$TCP_RMEM
|
||||
net.ipv4.tcp_wmem=$TCP_WMEM
|
||||
|
||||
# 短连接 & 延迟优化
|
||||
net.ipv4.tcp_fin_timeout=8
|
||||
net.ipv4.tcp_tw_reuse=1
|
||||
net.ipv4.tcp_window_scaling=1
|
||||
net.ipv4.tcp_timestamps=1
|
||||
net.ipv4.tcp_sack=1
|
||||
|
||||
# 避免保存历史 RTT,保持突发灵活
|
||||
net.ipv4.tcp_no_metrics_save=1
|
||||
# === END BBR ===
|
||||
SYSCTL
|
||||
|
||||
echo -e "${GREEN}✓ 配置已写入${NC}"
|
||||
}
|
||||
|
||||
# 应用配置
|
||||
reload_config() {
|
||||
echo ""
|
||||
echo -e "${BLUE}==> 应用配置${NC}"
|
||||
sysctl -p >/dev/null 2>&1
|
||||
echo -e "${GREEN}✓ 配置已生效${NC}"
|
||||
}
|
||||
|
||||
# 验证结果
|
||||
verify() {
|
||||
echo ""
|
||||
echo -e "${BLUE}==> 验证配置${NC}"
|
||||
|
||||
CC=$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null)
|
||||
QDISC=$(sysctl -n net.core.default_qdisc 2>/dev/null)
|
||||
|
||||
if [ "$CC" = "bbr" ] && [ "$QDISC" = "fq" ]; then
|
||||
echo -e "${GREEN}✓ 拥塞控制: $CC${NC}"
|
||||
echo -e "${GREEN}✓ 队列算法: $QDISC${NC}"
|
||||
else
|
||||
echo -e "${RED}⚠ 配置可能未完全生效,建议重启${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示摘要
|
||||
summary() {
|
||||
echo ""
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${GREEN}✅ BBR Blast Smooth v2 配置完成!${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "系统: $OS $VER"
|
||||
echo -e "内存: ${TOTAL_MEM}MB"
|
||||
echo -e "配置: $PROFILE"
|
||||
echo -e "缓冲: $(($RMEM_MAX/1024/1024))MB"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 主流程
|
||||
main() {
|
||||
detect_os
|
||||
detect_memory
|
||||
enable_bbr
|
||||
backup_config
|
||||
apply_config
|
||||
reload_config
|
||||
verify
|
||||
summary
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
Reference in New Issue
Block a user