在腾讯云部署 Web 服务,选 Ubuntu 是个很务实的选择。它轻量、稳定,且对容器化(Docker/K8s)支持极好。但“默认安装”和“生产环境”之间隔着巨大的鸿沟。
很多新手踩坑不是因为代码写得烂,而是因为 Linux 内核参数没调优,或者云服务器的资源限制没搞懂。下面我从内核参数、网络栈、文件系统、以及腾讯云特有配置四个维度,聊聊怎么把 Ubuntu 的性能榨干。
一、 内核参数优化(sysctl.conf)
这是最立竿见影的环节。Ubuntu 默认的 sysctl 配置偏向通用场景,高并发 Web 服务需要更激进的网络处理策略。
编辑 /etc/sysctl.conf,加入或修改以下关键项:
# 1. 允许重用 TIME_WAIT sockets,防止高并发下端口耗尽
net.ipv4.tcp_tw_reuse = 1
# 2. 缩短 TIME_WAIT 时间,快速回收连接
net.ipv4.tcp_fin_timeout = 30
# 3. 扩大本地端口范围,支持更多出站连接(如调用上游 API)
net.ipv4.ip_local_port_range = 1024 65535
# 4. 增大 TCP 接收/发送缓冲区,提升吞吐率
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 5. 启用 TCP Fast Open (TFO),减少握手延迟(需内核版本 >= 3.7)
net.ipv4.tcp_fastopen = 3
# 6. 禁用 ICMP 重定向,防止路由欺骗攻击,同时避免不必要的开销
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 7. 调整 SYN 队列长度,抗 DDoS 小流量冲击
net.ipv4.tcp_max_syn_backlog = 2048
net.core.somaxconn = 2048
# 8. 启用 IP 转发(如果是网关或负载均衡器角色才开,普通 Web 节点建议关闭)
# net.ipv4.ip_forward = 1
注意: 修改后执行 sudo sysctl -p 生效。不要盲目追求大数值,内存有限的低配实例(如 1核2G)适当调小缓冲区,否则容易 OOM(内存溢出)。
二、 文件系统与 I/O 调度
Web 服务通常涉及大量小文件读取(静态资源)或数据库写入。Ubuntu 默认使用 bfq 或 none(NVMe SSD),但对于机械硬盘或老旧云盘,调整调度算法很有必要。
-
查看当前磁盘调度器:
cat /sys/block/sda/queue/scheduler # 输出示例: [noop] deadline mq-deadline bfq -
推荐配置:
- SSD/NVMe 云盘: 使用
none或mq-deadline。SSD 没有寻道时间,不需要复杂的调度算法,none性能最好。 - HDD 云盘: 使用
deadline或bfq。deadline保证最大延迟不超过阈值,适合数据库;bfq公平性强,适合多用户共享。
- SSD/NVMe 云盘: 使用
-
挂载选项优化:
在/etc/fstab中为数据盘添加挂载参数:/dev/vdb1 /data ext4 defaults,noatime,nodiratime,commit=60 0 2noatime/nodiratime:不更新访问inode的时间戳,大幅减少磁盘写入,这对日志和频繁读文件的 Web 服务至关重要。commit=60:ext4 默认每秒刷盘一次,改为 60 秒可降低同步频率,提升写性能(若业务要求强一致性,请保持默认或更小值)。
三、 腾讯云特有配置:安全组与弹性网卡
很多人只关注系统内部,忽略了腾讯云的网络边界。
-
安全组(Security Group)规则优化:
- 不要开
0.0.0.0/0的所有端口。Web 服务只需开放 80/443。 - 如果后端有 Redis/MongoDB,务必通过私有内网 IP 通信,并在安全组中限制来源 IP 仅为 Web 服务器所在的 VPC 子网。这不仅安全,而且内网流量免费且带宽更高。
- 不要开
-
弹性网卡(ENI)与多队列中断:
- 对于高并发场景(CVM 实例规格 ≥ 4核),建议在腾讯云控制台开启弹性网卡的多队列中断功能。
- 这能让网卡中断分散到多个 CPU 核心上,避免单核成为网络收发的瓶颈。
- 在 Ubuntu 中,可通过
ethtool -L eth0 combined 4绑定队列到核心(具体命令因驱动而异,建议先查文档)。
-
CDN 与回源优化:
- 静态资源(图片、CSS、JS)必须上 CDN。不要指望 CVM 直接扛住所有静态请求。
- 回源协议建议用 HTTP/2 或 HTTP/3(QUIC),减少头部开销。
- 在 Ubuntu 上部署 Nginx/OpenResty 时,开启
gzip压缩和brotli压缩(需额外模块),可节省 70%+ 带宽。
四、 应用层与运行时优化
-
Nginx 配置微调:
worker_processes auto;:让 Nginx 自动匹配 CPU 核心数。worker_connections 10240;:每个 worker 最大连接数,根据ulimit -n调整。keepalive_timeout 65;:保持长连接,减少 TCP 握手开销。- 使用
sendfile on; tcp_nopush on; tcp_nodelay on;组合,优化文件传输。
-
PHP-FPM / Node.js 进程管理:
- PHP-FPM:设置
pm.max_children不宜过大,避免内存爆炸。公式参考:总内存 / 单个进程峰值内存。 - Node.js:使用
cluster模式或多实例 PM2,确保利用多核 CPU。
- PHP-FPM:设置
-
Swap 分区策略:
- 云服务器内存宝贵,建议禁用 Swap 或设置极低的 swappiness。
- 因为 Swap 会导致页面交换,IO 等待剧增,Web 响应变慢甚至超时。
sudo swapoff -a echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
五、 监控与持续优化
别猜性能瓶颈在哪,看数据说话。
-
腾讯云 Cloud Monitor(云监控):
- 安装腾讯云 Agent,监控 CPU、内存、网络流入流出、磁盘 IO。
- 设置告警:CPU > 80% 持续 5 分钟,立即通知。
-
本地工具:
htop:实时查看进程和资源占用。iostat -x 1:观察%util和await,判断是否 IO 瓶颈。ss -s:查看 TCP 连接状态,如果TIME-WAIT过多,检查上述tcp_tw_reuse是否生效。
总结
在腾讯云优化 Ubuntu Web 服务,核心思路是:
- 内核层面:放开网络限制,优化缓冲区。
- 存储层面:取消访问时间戳,合理选择 I/O 调度器。
- 云平台层面:善用内网、安全组隔离、CDN 提速。
- 应用层面:保持连接复用,控制进程数量防 OOM。
最后提醒:任何优化都要先在测试环境验证。特别是内核参数和挂载选项,不同业务场景(如高频小文件 vs 低频大文件)最优配置可能不同。压测(如使用 ab 或 wrk)是最好的检验标准。
云技术博客