服务器性能调优清单

一份可落地的 Linux 服务器调优 checklist:先监控找瓶颈,再逐项开 BBR、调 sysctl 与 ulimit、优化 Nginx 与数据库、加缓存与 CDN,并逐一验证效果。

调优的第一原则不是「改参数」,而是「先测量」。任何一台服务器/VPS 的瓶颈都可能在 CPU、内存、磁盘 IO 或网络上,盲目照抄网上的「玄学参数」往往无效,甚至更慢。请把下面每一项都当作「假设 → 修改 → 验证」的小实验来做。

第一步:先监控,找到真正的瓶颈

改任何东西之前,先看清楚系统在忙什么。

top            # 或 htop,看 CPU、内存、负载
vmstat 1       # 看上下文切换、swap、IO 等待
iostat -x 1    # 看磁盘 IO 利用率(%util 接近 100 即磁盘瓶颈)
ss -s          # 看连接数概览

如果 CPU 空闲但响应慢,瓶颈多半在磁盘或数据库;如果连接数被打满,再去调网络参数。没有数据支撑的调优就是猜。

第二步:开启 BBR 拥塞控制

BBR 能显著改善高延迟、有丢包链路上的吞吐,尤其适合跨境访问。

echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sysctl net.ipv4.tcp_congestion_control   # 确认输出为 bbr

第三步:调 sysctl 内核参数

按需追加到 /etc/sysctl.conf,再 sudo sysctl -p 生效:

  • fs.file-max = 1000000 — 系统级最大文件句柄数
  • net.core.somaxconn = 65535 — 加大监听队列(高并发建连必调)
  • net.ipv4.tcpmaxsynbacklog = 65535 — SYN 半连接队列
  • net.ipv4.tcptwreuse = 1 — 复用 TIMEWAIT 连接
  • net.ipv4.iplocalportrange = 1024 65535 — 扩大可用端口范围

只在压测确认相关队列真的溢出时才加大,别一次性全抄。

第四步:提高 ulimit 打开文件数

somaxconn 调大了,但进程级 nofile 太小照样会 Too many open files。

# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

systemd 管理的服务需在 unit 里加 LimitNOFILE=65535。用 ulimit -n 确认。

第五步:优化 Nginx

worker_processes auto;              # 通常等于 CPU 核数
worker_connections 10240;           # 单 worker 并发连接
keepalive_timeout 65;               # 复用连接,减少握手
gzip on;                            # 压缩文本响应

改完 nginx -t 校验再 reload。

第六步:数据库缓冲

数据库常是真正的瓶颈。给缓冲池足够内存(单机专用库可给物理内存的 50%70%):MySQL/MariaDB 调 innodbbufferpoolsize,PostgreSQL 调 sharedbuffers 与 effectivecachesize。改完观察缓存命中率,别把内存占到触发 swap。

第七步:加缓存层与 CDN

应用层引入 Redis/Memcached 缓存热点查询与会话,能直接卸掉数据库压力。静态资源(图片、JS、CSS)交给 CDN,既降低源站负载又提升各地访问速度。

小结

调优是一个闭环:监控找瓶颈 → 改一项 → 再测量验证 → 有效才保留。每次只动一个变量,记录改前改后的指标;参数值随机器规格与业务量而定,没有放之四海皆准的「最优配置」。稳住这个纪律,你的服务器/VPS 才能既快又稳。