Debian 服务器性能调优实战:一键完成网络、Swap、BBR 与系统优化
Debian 性能优化教程|一键部署
在服务器运维中,Debian 一直以稳定、安全、轻量著称,尤其适合用于 Web 服务、数据库、反向代理、Docker 容器、节点服务以及各类生产环境。然而,默认安装后的 Debian 系统通常偏向“通用稳定”,并不会针对网络吞吐、内核参数、文件句柄、Swap 策略、系统服务等方面进行深度调优。
如果你的 Debian 服务器存在以下情况:
- 网站访问速度不稳定;
- 高并发时连接数不足;
- Docker、Nginx、数据库服务运行一段时间后变慢;
- VPS 内存较小,经常触发 OOM;
- 网络延迟较高,TCP 连接建立慢;
- 系统资源利用率不高;
- 新服务器部署后需要快速完成基础优化;
那么本文将非常适合你。
本文将介绍 Debian 系统常见的性能优化思路,并提供一个可直接执行的“一键部署优化脚本”,帮助你快速完成基础性能调优。
适用系统:Debian 10 / Debian 11 / Debian 12
推荐权限:root 用户
适用场景:VPS、云服务器、独立服务器、Docker 宿主机、Web 服务器、代理服务器等
一、Debian 为什么需要性能优化?
Debian 的默认配置追求的是兼容性和稳定性,而不是极限性能。例如:
- 默认文件打开数较低;
- TCP 参数较保守;
- Swap 策略不一定适合小内存服务器;
- 部分系统服务可能无用但占用资源;
- 默认 DNS、软件源不一定适合当前地区;
- 内核网络队列、连接保持等参数没有针对高并发优化;
- 日志、缓存、临时文件长期堆积会影响磁盘性能。
因此,对于生产环境服务器来说,完成基础系统优化是非常有必要的。
优化并不是盲目追求跑分,而是为了让服务器在真实业务场景中更加稳定、响应更快、资源利用率更高。
二、优化前的准备工作
在执行系统优化之前,建议先做好以下准备。
1. 确认系统版本
cat /etc/debian_version
查看系统详细信息:
cat /etc/os-release
2. 确认当前用户权限
优化系统参数通常需要 root 权限。
whoami
如果不是 root 用户,可以切换:
sudo -i
3. 建议备份重要配置
虽然本文提供的脚本会尽量保持安全和通用,但不同业务场景仍可能存在差异。建议在执行前备份以下文件:
cp /etc/sysctl.conf /etc/sysctl.conf.bak
cp /etc/security/limits.conf /etc/security/limits.conf.bak
如果服务器上运行了重要业务,也建议提前创建快照。
三、Debian 性能优化核心方向
Debian 性能优化主要可以从以下几个方面入手:
- 系统软件更新
- 内核网络参数优化
- TCP 拥塞控制优化
- 文件句柄与进程限制优化
- Swap 与内存策略优化
- 磁盘与日志清理
- 关闭无用服务
- 安装常用性能工具
- 防火墙与安全基础设置
- 系统时区与时间同步优化
下面我们逐项说明。
四、更新系统软件包
保持系统软件包更新可以修复安全漏洞,同时获得更好的兼容性。
apt update
apt upgrade -y
对于生产环境,不建议随意执行大版本升级,但常规安全更新是必要的。
同时建议安装常用基础工具:
apt install -y curl wget vim nano sudo lsof htop iftop iotop net-tools unzip tar ca-certificates gnupg
这些工具在日常排查问题时非常有用。
五、优化系统网络参数
网络参数优化是服务器性能提升中非常重要的一环,尤其适用于:
- Nginx 高并发网站;
- API 服务;
- WebSocket 服务;
- 代理服务;
- 游戏服务;
- 数据库远程连接;
- Docker 容器宿主机。
常见优化包括:
- 提高 TCP 半连接队列;
- 提高 socket 缓冲区;
- 开启 TCP Fast Open;
- 优化 TIME_WAIT;
- 提升并发连接能力;
- 启用更合适的拥塞控制算法。
可以通过 /etc/sysctl.conf 统一配置。
示例参数如下:
net.ipv4.ip_forward = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 262144
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
应用配置:
sysctl -p
六、启用 BBR 拥塞控制算法
BBR 是 Google 提出的一种 TCP 拥塞控制算法,很多情况下可以改善网络吞吐表现,尤其是跨地区、国际线路、长距离传输场景。
查看当前拥塞控制算法:
sysctl net.ipv4.tcp_congestion_control
查看系统支持的算法:
sysctl net.ipv4.tcp_available_congestion_control
启用 BBR:
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
sysctl -p
验证:
lsmod | grep bbr
或者:
sysctl net.ipv4.tcp_congestion_control
如果输出为:
net.ipv4.tcp_congestion_control = bbr
说明已经启用成功。
七、优化文件句柄限制
Linux 系统中,文件句柄不仅代表普通文件,也包括网络连接、Socket、管道等。对于高并发服务器而言,文件句柄限制非常关键。
查看当前限制:
ulimit -n
如果输出为 1024,说明默认值较低。
可以编辑 /etc/security/limits.conf:
* soft nofile 1048576
* hard nofile 1048576
root soft nofile 1048576
root hard nofile 1048576
同时为 systemd 服务设置默认限制:
mkdir -p /etc/systemd/system.conf.d
cat > /etc/systemd/system.conf.d/limits.conf << EOF
[Manager]
DefaultLimitNOFILE=1048576
DefaultLimitNPROC=1048576
EOF
重载 systemd:
systemctl daemon-reexec
需要注意的是,对于 Nginx、MySQL、Redis、Docker 等服务,可能还需要在对应服务配置中单独设置限制。
八、Swap 与内存优化
Swap 是 Linux 用于内存不足时的交换空间。对于小内存 VPS,合理配置 Swap 可以降低程序因内存不足被系统杀死的概率。
查看 Swap 状态:
free -h
swapon --show
如果没有 Swap,可以创建一个 1G 或 2G 的 Swap 文件:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab
调整 swappiness:
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf
sysctl -p
参数说明:
vm.swappiness = 10:减少系统主动使用 Swap 的倾向;vm.vfs_cache_pressure = 50:降低回收目录项和 inode 缓存的压力。
对于数据库服务器,如果内存充足,可以设置较低的 swappiness。对于小内存机器,Swap 可以作为兜底机制,但不能代替物理内存。
九、磁盘与日志清理优化
服务器运行时间越长,日志、缓存、临时文件就越多。如果磁盘空间不足,会导致:
- 服务无法写入日志;
- 数据库异常;
- apt 无法安装软件;
- Docker 构建失败;
- 系统响应变慢。
查看磁盘空间:
df -h
查看目录占用:
du -sh /* 2>/dev/null
清理 apt 缓存:
apt autoremove -y
apt clean
清理系统日志:
journalctl --vacuum-time=7d
限制 systemd 日志大小,可以编辑:
vim /etc/systemd/journald.conf
建议配置:
SystemMaxUse=300M
RuntimeMaxUse=100M
然后重启日志服务:
systemctl restart systemd-journald
十、关闭不必要的服务
Debian 默认服务并不算多,但在部分云镜像中,可能预装了不必要的服务。
查看正在运行的服务:
systemctl list-units --type=service --state=running
查看开机自启服务:
systemctl list-unit-files --type=service | grep enabled
如果确认某些服务不需要,可以禁用:
systemctl disable 服务名
systemctl stop 服务名
例如,如果服务器不需要蓝牙、打印服务、桌面服务等,可以关闭它们。但在服务器环境中,大多数最小化镜像本身不会安装这些组件。
注意:不要随意关闭 ssh、networking、systemd-resolved、cron 等关键服务,否则可能导致远程连接中断或系统异常。
十一、安装性能监控工具
优化不是一次性操作,后续监控同样重要。建议安装以下工具:
apt install -y htop iotop iftop nload sysstat dstat lsof
常用命令:
查看 CPU 和内存
htop
查看磁盘 I/O
iotop
查看网络流量
iftop
查看端口占用
ss -tulnp
查看系统负载
uptime
查看内存
free -h
查看进程资源占用
ps aux --sort=-%mem | head
ps aux --sort=-%cpu | head
十二、一键部署 Debian 性能优化脚本
下面提供一个适用于 Debian 10/11/12 的通用优化脚本。脚本主要功能包括:
- 更新系统软件源;
- 安装常用工具;
- 优化 sysctl 网络参数;
- 启用 BBR;
- 提高文件句柄限制;
- 优化 systemd 默认限制;
- 创建 Swap;
- 清理 apt 缓存;
- 设置系统时区;
- 重启必要服务。
建议在全新服务器或维护窗口执行。执行前请确认拥有 root 权限。
一键执行命令
bash <(curl -fsSL https://example.com/debian-optimize.sh)
由于上面的链接只是示例地址,你也可以直接复制下面完整脚本保存执行。
十三、完整一键优化脚本
创建脚本:
nano debian-optimize.sh
写入以下内容:
#!/bin/bash
set -e
GREEN="\033[32m"
YELLOW="\033[33m"
RED="\033[31m"
RESET="\033[0m"
echo -e "${GREEN}=====================================${RESET}"
echo -e "${GREEN} Debian 性能优化一键部署脚本 ${RESET}"
echo -e "${GREEN}=====================================${RESET}"
if [ "$(id -u)" != "0" ]; then
echo -e "${RED}请使用 root 用户执行本脚本!${RESET}"
exit 1
fi
if ! grep -qi "debian" /etc/os-release; then
echo -e "${YELLOW}当前系统可能不是 Debian,脚本仍将继续执行,请谨慎。${RESET}"
fi
echo -e "${GREEN}[1/9] 更新系统软件包...${RESET}"
apt update -y
apt upgrade -y
echo -e "${GREEN}[2/9] 安装常用工具...${RESET}"
apt install -y curl wget vim nano sudo lsof htop iftop iotop nload sysstat net-tools unzip tar ca-certificates gnupg cron
echo -e "${GREEN}[3/9] 备份系统配置...${RESET}"
cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date +%F-%H%M%S) || true
cp /etc/security/limits.conf /etc/security/limits.conf.bak.$(date +%F-%H%M%S) || true
echo -e "${GREEN}[4/9] 写入 sysctl 优化参数...${RESET}"
cat > /etc/sysctl.d/99-debian-optimize.conf << EOF
# Debian performance optimize
# Network base
net.ipv4.ip_forward = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
# TCP queue
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 262144
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
# Port range
net.ipv4.ip_local_port_range = 1024 65535
# Buffer
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
# Memory
vm.swappiness = 10
vm.vfs_cache_pressure = 50
EOF
sysctl --system
echo -e "${GREEN}[5/9] 优化文件句柄限制...${RESET}"
cat > /etc/security/limits.d/99-debian-optimize.conf << EOF
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 1048576
* hard nproc 1048576
root soft nofile 1048576
root hard nofile 1048576
root soft nproc 1048576
root hard nproc 1048576
EOF
mkdir -p /etc/systemd/system.conf.d
cat > /etc/systemd/system.conf.d/99-limits.conf << EOF
[Manager]
DefaultLimitNOFILE=1048576
DefaultLimitNPROC=1048576
EOF
systemctl daemon-reexec
echo -e "${GREEN}[6/9] 检查并创建 Swap...${RESET}"
SWAP_EXISTS=$(swapon --show | wc -l)
if [ "$SWAP_EXISTS" -eq 0 ]; then
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
if [ "$MEM_TOTAL" -le 1024 ]; then
SWAP_SIZE="2G"
elif [ "$MEM_TOTAL" -le 2048 ]; then
SWAP_SIZE="2G"
else
SWAP_SIZE="1G"
fi
echo -e "${YELLOW}未检测到 Swap,正在创建 ${SWAP_SIZE} Swap 文件...${RESET}"
fallocate -l $SWAP_SIZE /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
if ! grep -q "/swapfile" /etc/fstab; then
echo "/swapfile none swap sw 0 0" >> /etc/fstab
fi
else
echo -e "${GREEN}已检测到 Swap,跳过创建。${RESET}"
fi
echo -e "${GREEN}[7/9] 设置时区与时间同步...${RESET}"
timedatectl set-timezone Asia/Shanghai || true
apt install -y systemd-timesyncd || true
systemctl enable systemd-timesyncd || true
systemctl restart systemd-timesyncd || true
echo -e "${GREEN}[8/9] 清理系统缓存与日志...${RESET}"
apt autoremove -y
apt clean
journalctl --vacuum-time=7d || true
mkdir -p /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-optimize.conf << EOF
[Journal]
SystemMaxUse=300M
RuntimeMaxUse=100M
EOF
systemctl restart systemd-journald || true
echo -e "${GREEN}[9/9] 输出优化结果...${RESET}"
echo -e "${GREEN}当前 BBR 状态:${RESET}"
sysctl net.ipv4.tcp_congestion_control || true
echo -e "${GREEN}当前文件句柄限制:${RESET}"
ulimit -n || true
echo -e "${GREEN}当前内存与 Swap:${RESET}"
free -h
echo -e "${GREEN}=====================================${RESET}"
echo -e "${GREEN} Debian 性能优化完成!${RESET}"
echo -e "${YELLOW}建议重启系统以确保所有配置完全生效:reboot${RESET}"
echo -e "${GREEN}=====================================${RESET}"
保存后执行:
chmod +x debian-optimize.sh
./debian-optimize.sh
执行完成后,建议重启服务器:
reboot
十四、脚本优化内容说明
1. 网络优化
脚本通过 /etc/sysctl.d/99-debian-optimize.conf 写入系统参数,而不是直接覆盖 /etc/sysctl.conf,这样更加规范,也便于后续维护。
主要优化点包括:
- 提高 TCP 连接队列;
- 缩短无用连接等待时间;
- 增加本地端口范围;
- 提高网络缓冲区;
- 开启 BBR;
- 开启 IP 转发。
其中 net.ipv4.ip_forward = 1 对 Docker、转发服务、代理服务比较有用。如果你的服务器只是普通 Web 服务器,开启它通常也不会造成明显问题,但如果你有严格安全策略,可以关闭该参数。
2. 文件句柄优化
对于 Nginx、Redis、MySQL、PostgreSQL、Docker 等服务来说,文件句柄非常重要。默认限制过低时,高并发场景可能出现:
Too many open files
脚本将限制提升到 1048576,可以满足大部分高并发场景。
3. Swap 优化
脚本会自动检测是否已有 Swap,如果没有,则根据内存大小创建 Swap 文件。这样可以避免小内存 VPS 因瞬时内存不足导致进程被杀。
不过需要注意:Swap 位于磁盘,速度远低于内存。如果服务器长期大量使用 Swap,说明应该升级内存,而不是继续依赖 Swap。
4. 日志清理
脚本会清理 apt 缓存,并将 systemd 日志限制在合理范围内,避免日志无限增长占满磁盘。
十五、优化完成后的验证方法
1. 验证 BBR
sysctl net.ipv4.tcp_congestion_control
期望输出:
net.ipv4.tcp_congestion_control = bbr
2. 验证文件句柄
ulimit -n
如果当前终端未生效,可以重新登录 SSH 后再查看。
3. 验证 Swap
free -h
swapon --show
4. 验证 sysctl 参数
sysctl -a | grep tcp_congestion_control
sysctl -a | grep somaxconn
5. 查看系统资源
htop
十六、针对不同场景的补充建议
1. Web 服务器
如果 Debian 用于 Nginx 或 Apache,除了系统优化外,还应调整 Web 服务本身配置。
Nginx 示例:
worker_processes auto;
worker_rlimit_nofile 1048576;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
同时需要根据 CPU、内存和业务情况配置 gzip、缓存、连接保持等参数。
2. 数据库服务器
如果运行 MySQL、MariaDB、PostgreSQL,系统优化只是基础,数据库参数同样重要。
例如 MySQL 需要重点关注:
innodb_buffer_pool_sizemax_connectionsquery_cache_sizetmp_table_sizethread_cache_size
数据库服务器不建议盲目追求最大连接数,连接数过高可能导致内存压力增大。
3. Docker 宿主机
如果 Debian 作为 Docker 宿主机,建议额外关注:
docker system df
docker system prune
定期清理无用镜像和容器:
docker system prune -a
但生产环境执行前要确认不会删除仍需使用的镜像。
4. 小内存 VPS
对于 512MB 或 1GB 内存的 VPS:
- 建议创建 1G~2G Swap;
- 尽量减少后台服务;
- 不要同时运行过多容器;
- 使用轻量级 Web 服务;
- 数据库尽量单独部署或使用轻量配置;
- 定期检查内存占用。
十七、常见问题解答
1. 执行优化脚本后必须重启吗?
不一定。大部分 sysctl 参数可以立即生效,Swap 也可以立即启用。但文件句柄、systemd 默认限制等配置通常需要重新登录或重启服务才能完全生效。因此建议在维护窗口重启一次。
2. BBR 是否一定能提升速度?
不一定。BBR 对部分网络环境提升明显,尤其是高延迟、跨地区线路。但如果你的服务器网络本身质量很好,或者瓶颈在应用程序、磁盘、数据库,BBR 的提升可能并不明显。
3. Swap 越大越好吗?
不是。Swap 只是内存不足时的兜底方案。Swap 过大并不能提升性能,反而可能掩盖内存不足的问题。一般 VPS 设置 1G~2G 即可。
4. 文件句柄设置越高越好吗?
对于大多数服务器,设置到 1048576 是比较常见的做法。但最终是否能支持高并发,还取决于内存、CPU、应用配置和网络质量。
5. 脚本是否适合生产环境?
脚本适合作为生产环境的基础优化模板,但不建议在没有测试的情况下直接用于核心业务服务器。生产环境应先在测试机验证,再安排维护窗口执行。
十八、回滚方法
如果执行脚本后出现异常,可以按以下方式回滚。
1. 删除 sysctl 优化文件
rm -f /etc/sysctl.d/99-debian-optimize.conf
sysctl --system
2. 删除 limits 优化文件
rm -f /etc/security/limits.d/99-debian-optimize.conf
rm -f /etc/systemd/system.conf.d/99-limits.conf
systemctl daemon-reexec
3. 关闭 Swap
如果脚本创建了 /swapfile,可以关闭并删除:
swapoff /swapfile
sed -i '/\/swapfile/d' /etc/fstab
rm -f /swapfile
4. 恢复时区
如果不需要上海时区,可以重新设置,例如 UTC:
timedatectl set-timezone UTC
十九、总结
Debian 默认系统已经足够稳定,但对于服务器应用来说,适当的性能优化可以明显提升系统的可用性和承载能力。本文从系统更新、网络参数、BBR、文件句柄、Swap、日志清理、服务管理和性能监控等方面介绍了 Debian 的基础优化方法,并提供了一份可直接执行的一键部署脚本。
需要注意的是,系统优化并不是万能的。真正影响性能的因素还包括:
- 应用程序架构;
- 数据库配置;
- 磁盘 I/O;
- 网络线路质量;
- CPU 与内存资源;
- 缓存策略;
- 安全策略;
- 业务访问模型。
因此,最好的优化方式不是复制所有参数,而是在理解参数作用的基础上,根据实际业务进行调整。
如果你是刚购买 Debian VPS 的用户,可以先执行本文的一键优化脚本,完成基础环境整理;如果你是生产环境运维人员,则建议将本文脚本作为模板,在测试环境验证后再部署到正式服务器。
最后,执行完优化后建议定期使用 htop、iotop、iftop、journalctl、df -h 等工具检查服务器状态,做到持续监控、持续优化,才能让 Debian 长期保持稳定、高效、安全的运行状态。