最后更新于:2026年7月

VPS 性能优化
VPS 性能优化:榨干每一滴性能

花同样的钱,为什么别人的 VPS 跑得飞快,你的却卡成狗? 答案往往不是硬件差距,而是系统配置和优化。

一台刚装好的 Linux VPS,默认配置是为"通用性"设计的,远未达到最佳性能。通过合理的内核参数调优、磁盘优化、网络配置和应用层调整,性能提升 50%-200% 是完全可能的。

本文从 CPU、内存、磁盘、网络四个维度,带你一步步把 VPS 性能榨到极限。


一、性能基准测试:优化前先测底

1.1 基础性能测试工具

CPU 性能测试:

BASH
# 单线程 CPU 测试
time echo "scale=5000; 4*a(1)" | bc -l

# 多线程 CPU 测试(需要安装 sysbench)
sysbench cpu --threads=$(nproc) --time=30 run

# Geekbench(需要下载)
wget https://cdn.geekbench.com/Geekbench-6.4.0-Linux.tar.gz
tar -xzf Geekbench-6.4.0-Linux.tar.gz
./Geekbench-6.4.0-Linux/geekbench6

内存性能测试:

BASH
# sysbench 内存测试
sysbench memory --threads=$(nproc) --time=30 run

# 带宽测试
dd if=/dev/zero of=/tmp/test bs=1G count=1 oflag=direct
# 再反向读取
dd if=/tmp/test of=/dev/null bs=1G count=1 oflag=direct

磁盘 I/O 测试:

BASH
# 顺序读写测试
dd if=/dev/zero of=/tmp/test bs=1G count=1 oflag=direct conv=fdatasync

# 随机读写测试(fio)
fio --name=random-write --ioengine=libaio --rw=randwrite --bs=4k --numjobs=16 --size=1G --iodepth=32 --runtime=60

# ioping(延迟测试)
ioping -c 10 /tmp

网络性能测试:

BASH
# 国内速度测试
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -

# 国际节点测试
wget -O /dev/null http://speed.hetzner.de/100MB.bin

# Ping 延迟测试
ping -c 10 google.com

1.2 性能指标解读

CPU 指标:

指标含义正常范围
CPU 使用率平均负载< 70%
系统时间内核占用< 10%
用户时间应用占用越高越好
等待时间I/O 等待< 5%

内存指标:

指标含义正常范围
可用内存空闲 + 缓存> 10%
Swap 使用交换分区使用< 50MB
缓存命中率文件缓存效率> 90%

磁盘指标:

指标含义正常范围
IOPS每秒 I/O 次数越高越好
吞吐量读写速度SSD: > 300MB/s
延迟平均响应时间< 10ms

网络指标:

指标含义正常范围
带宽上下行速度按套餐
延迟往返时间< 200ms
丢包率数据包丢失< 1%

二、CPU 与内核优化

2.1 CPU 调度优化

查看当前调度器:

BASH
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

设置性能模式:

BASH
# 临时设置(重启后失效)
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 永久设置(Ubuntu/Debian)
echo "GOVERNOR=\"performance\"" > /etc/default/cpufrequtils
update-rc.d ondemand disable

CPU 亲和性(针对多核场景):

BASH
# 将进程绑定到特定 CPU
taskset -c 0,1 <pid>

# 将服务绑定到特定 CPU(编辑 systemd 服务文件)
# 在 [Service] 段添加:
# CPUAffinity=0 1

2.2 内核参数调优

编辑 /etc/sysctl.conf

BASH
# CPU 调度优化
kernel.sched_migration_cost_ns=5000000
kernel.sched_autogroup_enabled=0

# 内存管理优化
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_ratio=10
vm.dirty_background_ratio=5

# 文件描述符限制
fs.file-max=655350
fs.nr_open=655350

# TCP 网络优化
net.core.somaxconn=65535
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.rmem_default=8388608
net.core.wmem_default=8388608

# TCP 连接参数
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_max_tw_buckets=65535

# UDP 优化
net.ipv4.udp_mem=16384 262144 16777216

# 开启 BBR 拥塞控制
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

生效配置:

BASH
sysctl -p

2.3 禁用不必要的服务

BASH
# 查看运行中的服务
systemctl list-units --type=service --state=running

# 禁用不需要的服务(根据实际情况)
systemctl disable --now bluetooth
systemctl disable --now avahi-daemon
systemctl disable --now cups
systemctl disable --now ModemManager
systemctl disable --now snapd
systemctl disable --now apport
systemctl disable --now rsyslog  # 改用 systemd-journald

三、内存优化

3.1 Swap 策略优化

查看当前 Swap 使用:

BASH
free -h
swapon --show

调整 swappiness(内存紧张时才用 Swap):

BASH
# 临时设置
echo 10 > /proc/sys/vm/swappiness

# 永久设置(编辑 /etc/sysctl.conf)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p

创建优化的 Swap 文件:

BASH
# 创建 4GB Swap 文件
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 永久启用(编辑 /etc/fstab)
echo "/swapfile none swap defaults 0 0" >> /etc/fstab

# 调整 Swap 优先级
echo "vm.swappiness=5" >> /etc/sysctl.conf

3.2 内存缓存优化

查看缓存使用:

BASH
vmstat 1 10
cat /proc/meminfo

优化页缓存:

BASH
# 降低页缓存压力(编辑 /etc/sysctl.conf)
echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf

# 脏页刷新优化
echo "vm.dirty_ratio=10" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf
echo "vm.dirty_writeback_centisecs=100" >> /etc/sysctl.conf
sysctl -p

3.3 大页内存(针对数据库场景)

BASH
# 查看大页支持
cat /proc/meminfo | grep HugePages

# 启用透明大页(THP)
echo always > /sys/kernel/mm/transparent_hugepage/enabled
echo always > /sys/kernel/mm/transparent_hugepage/defrag

# 永久启用(编辑 /etc/rc.local)
echo 'echo always > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
echo 'echo always > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local

四、磁盘 I/O 优化

4.1 SSD 性能优化

查看磁盘信息:

BASH
lsblk
smartctl -a /dev/vda  # 需要安装 smartmontools

SSD 优化参数:

BASH
# 启用 TRIM(确保 SSD 性能)
fstrim /

# 永久启用(编辑 /etc/fstab,在分区挂载选项中添加 discard)
# UUID=xxx / ext4 defaults,discard 0 1

# 或者使用 cron 定期 TRIM
echo "0 0 * * * root fstrim /" >> /etc/cron.daily/fstrim

文件系统优化(ext4):

BASH
# 挂载时优化选项(编辑 /etc/fstab)
# UUID=xxx / ext4 defaults,noatime,nodiratime,discard,errors=remount-ro 0 1

# noatime:不更新访问时间
# nodiratime:不更新目录访问时间
# discard:启用 TRIM

4.2 磁盘调度优化

查看当前调度器:

BASH
cat /sys/block/vda/queue/scheduler

设置 deadline 调度器(适合 SSD):

BASH
# 临时设置
echo deadline > /sys/block/vda/queue/scheduler

# 永久设置(编辑 /etc/rc.local)
echo 'echo deadline > /sys/block/vda/queue/scheduler' >> /etc/rc.local

4.3 应用层磁盘优化

数据库优化(MySQL/MariaDB):

INI
# /etc/mysql/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf

[mysqld]
# 内存分配
innodb_buffer_pool_size = 50%      # 物理内存的 50%-70%
innodb_log_buffer_size = 64M
innodb_log_file_size = 256M

# I/O 优化
innodb_flush_log_at_trx_commit = 1  # 生产环境设为 1(ACID),性能优先设为 2
innodb_flush_method = O_DIRECT
innodb_doublewrite = 0              # SSD 上可以关闭
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# 连接数
max_connections = 500
wait_timeout = 60

日志系统优化:

BASH
# 限制日志大小(编辑 /etc/systemd/journald.conf)
MaxRetentionSec=7day
SystemMaxUse=1G
RuntimeMaxUse=500M

# 清理旧日志
journalctl --vacuum-time=7days
journalctl --vacuum-size=500M

五、网络优化

5.1 TCP 协议栈优化

开启 BBR 拥塞控制:

BASH
# 检查内核版本(需要 4.9+)
uname -r

# 临时开启
echo "net.core.default_qdisc=fq" | tee /etc/sysctl.d/99-bbr.conf
echo "net.ipv4.tcp_congestion_control=bbr" | tee -a /etc/sysctl.d/99-bbr.conf
sysctl -p /etc/sysctl.d/99-bbr.conf

# 验证
sysctl net.ipv4.tcp_congestion_control
# 输出:net.ipv4.tcp_congestion_control = bbr

TCP 连接参数优化:

BASH
# 编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-network.conf

# 最大连接数
net.core.somaxconn=65535

# 缓冲区大小
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.rmem_default=8388608
net.core.wmem_default=8388608

# TCP 连接追踪
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000

# TCP 超时
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=5

# 端口范围
net.ipv4.ip_local_port_range=1024 65535

5.2 NGINX 网络优化

NGINX
# /etc/nginx/nginx.conf

user www-data;
worker_processes auto;
worker_cpu_affinity auto;

events {
    worker_connections 65535;
    multi_accept on;
    use epoll;
}

http {
    # 基础配置
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 1000;
    types_hash_max_size 2048;
    
    # Gzip 压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # 缓冲区
    client_body_buffer_size 128k;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 100m;
    
    # 代理配置
    proxy_buffer_size 64k;
    proxy_buffers 8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 256k;
    proxy_connect_timeout 10s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    
    # SSL 优化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_stapling on;
    ssl_stapling_verify on;
}

5.3 Firewall 优化

UFW 优化:

BASH
# 启用 UFW
ufw enable

# 允许必要端口
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp

# 限制 SSH 连接频率
ufw limit 22/tcp

# 禁用 IPv6(如果不需要)
echo "IPV6=no" >> /etc/default/ufw
ufw reload

NAT 与端口转发:

BASH
# 启用 IP 转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# 配置端口转发(需要 iptables)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables-save > /etc/iptables/rules.v4

六、应用层优化

6.1 PHP-FPM 优化

INI
; /etc/php/8.2/fpm/pool.d/www.conf

; 进程管理
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500

; 内存限制
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 100M

; 超时设置
request_terminate_timeout = 60s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/www-slow.log

6.2 Redis 优化

INI
# /etc/redis/redis.conf

# 内存限制
maxmemory 2gb
maxmemory-policy allkeys-lru

# 持久化
appendonly yes
appendfsync everysec

# 连接限制
maxclients 10000
timeout 300

# 网络优化
tcp-backlog 511
tcp-keepalive 300

# 禁用保护模式(如果需要远程访问)
protected-mode no
bind 0.0.0.0

6.3 Node.js 优化

BASH
# 启动时优化
node --max-old-space-size=2048 --optimize-for-size app.js

# PM2 配置(ecosystem.config.js)
module.exports = {
  apps: [{
    name: 'myapp',
    script: 'app.js',
    instances: 'max',
    exec_mode: 'cluster',
    max_memory_restart: '500M',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
};

七、性能监控与诊断

7.1 实时监控工具

htop(增强版 top):

BASH
apt install htop -y
htop

nmon(系统监控):

BASH
apt install nmon -y
nmon

glances(综合监控):

BASH
pip install glances
glances

7.2 日志分析

实时查看日志:

BASH
# 系统日志
journalctl -f

# NGINX 日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# MySQL 日志
tail -f /var/log/mysql/error.log

# PHP-FPM 日志
tail -f /var/log/php-fpm/www-error.log

日志分析工具:

BASH
# 安装 goaccess
apt install goaccess -y

# 实时分析 NGINX 日志
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html

7.3 性能诊断流程

PLAINTEXT
性能问题 → 定位瓶颈
              │
              ├── CPU 高 → htop 查看进程 → 分析代码/优化算法
              │
              ├── 内存高 → free -h → 检查缓存/Swap → 优化内存使用
              │
              ├── 磁盘 I/O 高 → iostat → 检查读写 → 优化数据库/缓存
              │
              └── 网络高 → netstat → 检查连接数 → 优化 TCP 参数

诊断命令速查:

BASH
# CPU 诊断
htop
top -bn1 | head -20
mpstat -P ALL

# 内存诊断
free -h
vmstat 1 10
cat /proc/meminfo

# 磁盘诊断
iostat -x 1 10
iotop
df -h

# 网络诊断
netstat -anp | grep ESTABLISHED | wc -l
ss -s
iftop

八、一键优化脚本

创建优化脚本:

BASH
#!/bin/bash

echo "开始 VPS 性能优化..."

# 1. 更新系统
echo "步骤 1:更新系统..."
apt update && apt upgrade -y

# 2. 安装必要工具
echo "步骤 2:安装工具..."
apt install -y sysbench htop nmon iotop iftop fio smartmontools

# 3. CPU 调度优化
echo "步骤 3:CPU 调度优化..."
echo "GOVERNOR=\"performance\"" > /etc/default/cpufrequtils
update-rc.d ondemand disable

# 4. 内核参数优化
echo "步骤 4:内核参数优化..."
cat > /etc/sysctl.d/99-optimization.conf << 'EOF'
# CPU 调度
kernel.sched_migration_cost_ns=5000000
kernel.sched_autogroup_enabled=0

# 内存
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_ratio=10
vm.dirty_background_ratio=5

# 文件描述符
fs.file-max=655350
fs.nr_open=655350

# TCP 网络
net.core.somaxconn=65535
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_max_tw_buckets=65535
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

sysctl -p /etc/sysctl.d/99-optimization.conf

# 5. 创建 Swap
echo "步骤 5:创建 Swap..."
if [ ! -f /swapfile ]; then
    fallocate -l 4G /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    echo "/swapfile none swap defaults 0 0" >> /etc/fstab
fi

# 6. 禁用不必要的服务
echo "步骤 6:禁用不必要的服务..."
systemctl disable --now bluetooth 2>/dev/null || true
systemctl disable --now avahi-daemon 2>/dev/null || true
systemctl disable --now cups 2>/dev/null || true
systemctl disable --now ModemManager 2>/dev/null || true

# 7. SSD 优化
echo "步骤 7:SSD 优化..."
echo "0 0 * * * root fstrim /" >> /etc/cron.daily/fstrim

echo "优化完成!请重启系统以确保所有配置生效。"

使用方法:

BASH
chmod +x optimize.sh
./optimize.sh
reboot

九、常见问题与解决方案

Q1:CPU 使用率一直很高怎么办?

排查步骤:

BASH
# 查看占用 CPU 最高的进程
htop

# 查看进程树
pstree -p <pid>

# 分析线程
ps -T -p <pid>

# 查看系统调用
strace -p <pid>

常见原因:

Q2:内存不够用怎么办?

排查步骤:

BASH
# 查看内存使用
free -h

# 查看内存占用最高的进程
top -o %MEM

# 查看 Swap 使用
swapon --show

解决方案:

Q3:磁盘 I/O 慢怎么办?

排查步骤:

BASH
# 查看 I/O 使用
iostat -x 1 10
iotop

# 查看磁盘健康
smartctl -a /dev/vda

解决方案:

Q4:网络延迟高怎么办?

排查步骤:

BASH
# 测试延迟
ping -c 10 google.com

# 测试路由
traceroute google.com

# 测试带宽
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -

解决方案:


十、总结

优化效果对比

优化项优化前优化后提升
CPU 性能默认调度性能模式10-30%
内存效率默认 swap优化策略20-50%
磁盘 I/O默认挂载TRIM + noatime10-20%
网络吞吐量默认 TCPBBR + 优化参数30-100%
NGINX 并发默认配置优化配置50-200%

优化优先级

PLAINTEXT
高优先级(立竿见影):
1. 启用 BBR 拥塞控制
2. 调整 TCP 参数
3. 优化 NGINX 配置
4. 设置 CPU 性能模式

中优先级(需要配置):
1. 内核参数调优
2. 数据库优化
3. 内存管理优化
4. SSD 优化

低优先级(进阶优化):
1. CPU 亲和性
2. 大页内存
3. 进程隔离
4. 深度应用优化

最后的提醒

优化不是一次性的工作,而是持续的过程。 定期监控、分析瓶颈、调整配置,才能保持系统的最佳性能。


【相关推荐】


通过本文的优化方案,你的 VPS 性能至少能提升 50%。记住,优化的关键是:先测底,再优化,后验证。 祝你拥有一台飞一般的 VPS!🚀

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/vps-performance-optimization-2026/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。