#!/bin/bash

# ===================================================================
#  Debian 高性能服务器内核优化脚本
#
#  注意：
#  - 此脚本仅提供一些通用的内核优化选项，具体配置需根据实际情况调整。
#  - 修改内核参数存在风险，请务必在操作前备份重要数据。
#  - 执行脚本后，建议重启服务器以使更改生效。
# ===================================================================

# 检查是否为 root 用户
if [[ $EUID -ne 0 ]]; then
  echo "此脚本需要 root 权限运行！"
  exit 1
fi

# 备份 /etc/sysctl.conf 文件
cp /etc/sysctl.conf /etc/sysctl.conf.bak

# -------------------------------------------------------------------
#  网络参数优化
# -------------------------------------------------------------------

# TCP 参数优化
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sysctl -w net.core.somaxconn=65535

# 网络缓存区大小优化
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem=4096 87380 16777216
sysctl -w net.ipv4.tcp_wmem=4096 65536 16777216

# -------------------------------------------------------------------
#  内存管理优化
# -------------------------------------------------------------------

# 禁用内存页面合并 (transparent huge pages)
sysctl -w vm.transparent_hugepage_enabled=never

# 调整 swappiness 参数 (降低交换分区使用频率)
sysctl -w vm.swappiness=10

# -------------------------------------------------------------------
#  其他优化
# -------------------------------------------------------------------

# 提高文件描述符限制
sysctl -w fs.file-max=1000000

# 调整最大可打开文件数
ulimit -n 1000000

# 将上述配置写入 /etc/sysctl.conf 文件
sysctl -p

echo "内核优化已完成，建议重启服务器以使更改生效。"
