你有没有遇到过这种情况:网站白天还好好的,一到晚上用户一多,页面加载就开始卡顿,甚至直接打不开?别急着换服务器,问题可能出在配置上。很多性能瓶颈,其实通过合理的服务器配置优化就能解决。
内存交换设置别忽视
Linux 服务器默认的 swappiness 值通常是 60,这意味着系统会在内存还有空余时就提前把数据写入 swap 分区。对于以性能为主的服务器来说,这反而会拖慢响应速度。建议将这个值调低,比如设为 10,让系统尽量使用物理内存。
# 临时修改
sysctl vm.swappiness=10
# 永久生效,写入配置文件
echo "vm.swappiness=10" >> /etc/sysctl.conf
文件句柄数要够用
高并发场景下,每个连接都会占用一个文件句柄。如果系统限制太小,用户一多就会报错“Too many open files”。这时候就得调整 ulimit。
# 查看当前限制
ulimit -n
# 临时提升到 65535
ulimit -n 65535
要想永久生效,可以在 /etc/security/limits.conf 里加上:
* soft nofile 65535
* hard nofile 65535
Nginx 连接优化示例
如果你用 Nginx 做反向代理,worker_processes 和 worker_connections 的组合决定了最大并发能力。一台 4 核 CPU 的机器,可以这样设置:
worker_processes 4;
worker_rlimit_nofile 65535;
events {
worker_connections 8192;
use epoll;
multi_accept on;
}
这样理论最大连接数能达到 4 × 8192 = 32768,基本能满足中小型业务需求。
内核参数微调提升网络性能
TCP 连接的建立和释放也有优化空间。比如开启 TIME-WAIT 快速回收、重用,避免大量连接堆积。
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 注意:在 NAT 环境下建议关闭
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
把这些写进 /etc/sysctl.conf,然后执行 sysctl -p 生效。
磁盘 I/O 调度策略选对很重要
传统机械硬盘适合 cfq 调度器,但现在的服务器基本都用 SSD。对于 SSD,应该切换到 deadline 或 noop(现在叫 none)模式,减少不必要的调度开销。
# 查看当前调度策略
cat /sys/block/sda/queue/scheduler
# 临时切换(以 none 为例)
echo none > /sys/block/sda/queue/scheduler
实际优化过程中,别指望一键搞定。最好是结合监控工具,比如用 htop 看资源占用,用 netstat 查连接状态,有针对性地改配置。改完一项,观察效果,再决定下一步怎么调。
服务器就像一辆车,出厂设置未必适合你的路况。花点时间调一调,可能不用加钱升级硬件,就能跑出更好的成绩。