一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Ubuntu 服务器高并发调优如何做

时间:2026-08-10 12:21:49 编辑:袖梨 来源:一聚教程网

Ubuntu服务器高并发调优需系统性优化内核、网络栈、进程模型和资源调度四层面:调整sysctl参数提升连接承载能力,扩大文件描述符限制,选用异步非阻塞应用模型,并通过监控与压测闭环验证效果。

Ubuntu 服务器高并发调优不是堆参数,而是围绕内核、网络栈、进程模型和资源调度四个层面系统性地释放瓶颈。核心在于让单机在有限资源下更高效地处理成千上万的并发连接,同时保持响应稳定。

调整内核网络参数提升连接承载能力

默认的 Linux 内核参数为通用场景设计,对高并发 Web/API 服务明显保守。关键需修改 /etc/sysctl.conf 并生效:

  1. 增大可用端口范围:net.ipv4.ip_local_port_range = 1024 65535(避免 TIME_WAIT 耗尽端口)
  2. 重用 TIME_WAIT 套接字:net.ipv4.tcp_tw_reuse = 1(仅对客户端有效;若服务端主动关闭连接,需配合 tcp_fin_timeout 缩短等待时间)
  3. 禁用 SYN Cookie(除非遭受攻击):net.ipv4.tcp_syncookies = 0(减少开销,提升吞吐)
  4. 增大连接队列:net.core.somaxconn = 65535net.core.netdev_max_backlog = 5000
  5. 启用快速回收(谨慎使用):net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_max_tw_buckets = 2000000

执行 sudo sysctl -p 加载配置,用 sysctl -a | grep xxx 验证是否生效。

优化文件描述符与进程限制

每个 TCP 连接、日志文件、socket 都占用一个文件描述符(fd)。默认 1024 极易成为瓶颈。

  1. 全局设置:编辑 /etc/security/limits.conf,添加

    * soft nofile 65535

    * hard nofile 65535

    (注意:若使用 systemd,还需修改 /etc/systemd/system.confDefaultLimitNOFILE=65535,并重启 systemd)

  2. 确认应用启动时继承该限制:对 Nginx、Gunicorn 或自研服务,检查其运行用户是否受 limits 约束,必要时在 service 文件中显式设置 LimitNOFILE=65535

适配应用层运行时与事件模型

内核调优只是基础,应用本身必须支持异步非阻塞 I/O 才能真正利用高并发能力。

  1. Web 服务优先选用 epoll-驱动的模型:Nginx 默认即支持;Node.js、Go HTTP Server、Python 的 uvicorn(+ uvloop)或 hypercorn 均原生适配
  2. 避免多线程/多进程粗粒度模型:如 Apache prefork 或 Python 默认的 sync workers,在万级连接下会因上下文切换和内存占用失控
  3. 数据库连接池需匹配并发量:例如 PostgreSQL 的 max_connections 和应用侧连接池大小(如 SQLAlchemy 的 pool_size)应协同规划,避免连接耗尽或过度争抢

监控与压测验证调优效果

不测量就无法优化。必须建立闭环验证机制:

  1. 实时观测:ss -s 查看 socket 统计(尤其 timewaitestablished 数量);cat /proc/net/sockstat 看内存分配情况
  2. 连接跟踪压力:netstat -an | awk '$1 ~ /^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 分析状态分布
  3. 压测工具选型:用 wrkhey 模拟真实请求(含 keep-alive),观察错误率、P99 延迟、CPU/内存饱和点
  4. 记录基线:每次调参前保存 sysctl -aulimit -a 输出,便于回滚与对比

热门栏目