#!/bin/bash # # Hysteria2 终极优化脚本 (Systemd Drop-in 架构 + BBR/UDP 调优) # set -euo pipefail # --- 变量配置 --- SERVICE_NAME="hysteria-server.service" # 目标限制 (65535 足以应付大多数情况,100万也可以) LIMIT_NUM="65535" # 配置文件路径 (使用 .d 目录,模块化管理) LIMITS_FILE="/etc/security/limits.d/99-hysteria2.conf" SYSCTL_FILE="/etc/sysctl.d/99-hysteria2.conf" OVERRIDE_DIR="/etc/systemd/system/${SERVICE_NAME}.d" OVERRIDE_FILE="${OVERRIDE_DIR}/override.conf" # 颜色 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' PLAIN='\033[0m' # 检查 Root if [ "$(id -u)" -ne 0 ]; then echo -e "${RED}错误:必须以 root 权限运行。${PLAIN}" exit 1 fi echo -e "${GREEN}=== Hysteria2 终极优化脚本 ===${PLAIN}" # 0. 检查服务存在性 if ! systemctl cat "${SERVICE_NAME}" >/dev/null 2>&1; then echo -e "${RED}错误:未找到服务 ${SERVICE_NAME}${PLAIN}" echo -e "请确认服务名正确。" exit 1 fi # ------------------------------------------------- # 1. 模块化配置 limits (文件描述符) # ------------------------------------------------- echo -e "\n${YELLOW}[1/3] 配置 Limits (使用 /etc/security/limits.d/)...${PLAIN}" cat > "${LIMITS_FILE}" <> /etc/pam.d/common-session fi # ------------------------------------------------- # 2. 模块化配置 Sysctl (内核网络参数 + BBR) # ------------------------------------------------- echo -e "\n${YELLOW}[2/3] 配置内核网络参数 (使用 /etc/sysctl.d/)...${PLAIN}" # 这里使用了我之前提供的参数,加上了 BBR,调整了 buffer 大小为适中的 25MB cat > "${SYSCTL_FILE}" </dev/null 2>&1 echo "内核参数已重载 (BBR + UDP Buffer)。" # ------------------------------------------------- # 3. Systemd Override (Drop-in 模式) # ------------------------------------------------- echo -e "\n${YELLOW}[3/3] 配置 Systemd Override (Drop-in)...${PLAIN}" mkdir -p "${OVERRIDE_DIR}" cat > "${OVERRIDE_FILE}" </dev/null | tr -d ' ') if [ -z "${PID}" ] || [ "${PID}" = "0" ]; then echo -e "${RED}服务未启动或 PID 获取失败,请手动检查。${PLAIN}" exit 1 fi # 读取限制 SOFT_LIMIT=$(awk '/Max open files/ {print $4}' "/proc/${PID}/limits") if [ "$SOFT_LIMIT" == "$LIMIT_NUM" ]; then echo -e "${GREEN}验证成功!${PLAIN}" echo -e "PID: $PID | Limit: $SOFT_LIMIT" echo -e "优化策略: Systemd Override + Limit.d + Sysctl.d (BBR Enabled)" else echo -e "${RED}验证失败。当前 Limit: $SOFT_LIMIT${PLAIN}" fi