Web服务器调优核心是紧扣HTTP/HTTPS流量模型系统性优化:先通过ss、vmstat、iostat、sar采集24小时基线定位瓶颈;再调优网络栈参数(如somaxconn、tcp_tw_reuse、BBR拥塞控制);同步提升文件描述符限制与文件系统配置。

Web 服务器调优的核心是解决高并发连接、短连接激增、响应延迟敏感、小包传输频繁等典型特征。不能套用数据库或邮件服务的参数,必须紧扣 HTTP/HTTPS 流量模型来调整。
先定位 Web 服务的真实瓶颈
盲目调参反而可能引发 OOM 或连接失败。建议先运行 24 小时基线采集:
- 用 ss -s 和 cat /proc/net/sockstat 查看 ESTABLISHED/TIME-WAIT 连接数占比
- 用 vmstat 1 60 观察 r(运行队列)和 wa(IO 等待)是否持续超标
- 用 iostat -x 1 看 %util 是否长期 >80%,判断磁盘是否拖慢静态资源响应
- 用 sar -n DEV 1 检查网卡收发速率与丢包率,确认是否带宽打满或存在错包
网络栈关键参数(适用于 Nginx/Apache/Tomcat)
重点优化连接建立、复用与缓冲区,避免“端口耗尽”“accept 队列溢出”“小包延迟高”问题:
-
net.core.somaxconn = 65535:全连接队列上限,必须 ≥ Web 服务 listen backlog(如 Nginx 的
listen ... backlog=65535) - net.ipv4.tcp_max_syn_backlog = 65535:SYN 半连接队列,防 SYN Flood 同时支撑突发建连
- net.ipv4.tcp_tw_reuse = 1:允许 TIME-WAIT socket 重用于新 outgoing 连接(安全且必要)
- net.ipv4.ip_local_port_range = "1024 65535":扩大临时端口范围,缓解 upstream 代理(如反向代理到后端)端口枯竭
- net.core.netdev_max_backlog = 5000:网卡软中断收包队列,防止高并发下丢包
缓冲区与拥塞控制(提升吞吐与首字节时间)
Web 请求多为小包(HTTP header)、响应含中等大小 body(HTML/JS/CSS),需平衡延迟与吞吐:
- net.core.rmem_default / wmem_default = 262144(256KB):比默认值(21KB)更适配现代千兆/万兆网卡
- net.ipv4.tcp_rmem = "4096 262144 4194304":自动缩放接收窗口,最小保小包低延迟,最大撑大响应体
- net.ipv4.tcp_congestion_control = bbr:BBR 基于带宽+RTT 建模,比 cubic 更稳,降低长尾延迟
- net.core.default_qdisc = fq:配合 BBR 使用,公平调度连接,抑制 bufferbloat
配套系统级设置(常被忽略但影响上线稳定性)
内核参数只是半边,还需同步调整用户态资源限制和文件系统行为:
- 在 /etc/security/limits.conf 中设
www-data soft nofile 1048576和hard nofile 1048576(替换为实际运行用户) - 确保 Web 服务启动前已加载限制:systemd 服务加
LimitNOFILE=1048576,或 ulimit -n 在启动脚本中显式设置 - 若使用 XFS 文件系统,挂载时加
noatime,inode64,logbufs=8减少元数据写放大 - 禁用 IPv6(若不用):
net.ipv6.conf.all.disable_ipv6 = 1,避免 DNS 双栈解析超时


















