分享VPS优化的几个措施

躺平的咸鱼 发布于 7 天前 7 次阅读


  1. 基础优化
    1.1 关闭不必要的服务

检查哪些服务在后台运行,并禁用不必要的服务:

systemctl list-units --type=service --state=running
systemctl disable --now <service-name>

常见可以关闭的服务:cups, bluetooth, avahi-daemon, rpcbind 等。
1.2 更新系统与软件包

保持系统最新,减少安全漏洞并提升性能:

apt update && apt upgrade -y # Debian/Ubuntu
yum update -y # CentOS

1.3 启用BBR提高网络速度

BBR(Bottleneck Bandwidth and Round-trip propagation time)可以优化TCP传输,提高网络吞吐量:

echo "net.core.default_qdisc=fq" | tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | tee -a /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.tcp_congestion_control

如果返回 bbr,说明启用成功。
2. CPU与进程优化
2.1 限制CPU占用(防止高负载)

安装 cpulimit 限制单个进程的CPU占用:

apt install cpulimit -y # Debian/Ubuntu
yum install epel-release -y && yum install cpulimit -y # CentOS
cpulimit -e process_name -l 50 # 限制该进程最多使用50%的CPU

2.2 限制进程数量(防止资源耗尽)

编辑 /etc/security/limits.conf,为指定用户添加限制:

username hard nproc 200

这样用户 username 最多只能运行 200 个进程。
3. 内存优化
3.1 禁用或调整 Swap

Swap 在 VPS 上可能会影响性能,特别是 SSD 方案:

swapoff -a # 关闭 Swap
sed -i '/swap/d' /etc/fstab # 防止重启后恢复

如果 VPS 内存较小(512MB~1GB),建议保留 Swap 但优化:

echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

这样系统更倾向于使用物理内存,而非频繁读写 Swap。
3.2 清理缓存

定期释放无用的缓存,减少内存占用:

sync; echo 3 > /proc/sys/vm/drop_caches

可以加到 cron 任务中,每天定期执行:

echo "0 4 * * * root sync; echo 3 > /proc/sys/vm/drop_caches" >> /etc/crontab

  1. 磁盘与存储优化
    4.1 使用 Fstrim(针对 SSD VPS)

如果 VPS 使用 SSD,启用 fstrim 以保持性能:

systemctl enable fstrim.timer
systemctl start fstrim.timer

4.2 提高文件系统 I/O 性能

调整 I/O 调度器:

echo "noop" > /sys/block/sda/queue/scheduler

或者 mq-deadline(适用于大部分 VPS):

echo "mq-deadline" > /sys/block/sda/queue/scheduler

4.3 清理日志文件

日志文件过大会影响磁盘空间,定期清理:

journalctl --vacuum-size=100M # 清理日志至100MB

  1. 网络优化
    5.1 调整 TCP 参数

编辑 /etc/sysctl.conf 添加以下内容:

net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 87380 16777216
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_slow_start_after_idle=0

应用新配置:

sysctl -p

5.2 禁用 IPV6(如果不需要)

部分 VPS 的 IPv6 可能影响网络稳定性,建议禁用:

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p