You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于32核高性能服务器的Nginx SSL与性能优化方案及流程咨询

基于32核高性能服务器的Nginx SSL与性能优化方案及流程咨询

嗨,看了你的测试数据和问题,先给你拆解下核心矛盾:不带-k(KeepAlive)时性能暴跌到2348 RPS,本质是SSL/TLS握手的开销在无连接复用的情况下被彻底放大了——每次请求都要重新完成TCP三次握手+SSL/TLS握手,这两步的延迟和CPU开销远大于Health Check请求本身,而你的服务器CPU还有大量空闲(vmstat显示id始终在95%以上),说明瓶颈根本不在计算能力,而是连接建立的效率和Nginx的连接处理配置没跟上。

下面给你分模块讲具体优化方案和系统化调优流程:

一、针对无KeepAlive场景的SSL核心优化

这是解决你当前低RPS的关键,毕竟不是所有客户端都会用KeepAlive:

  • 启用SSL会话复用:让重复客户端不用每次都重新握手,直接复用之前的会话。在Nginx的http块里加:
    ssl_session_cache shared:SSL:10m;  # 10M缓存大概能存40万会话
    ssl_session_timeout 1d;             # 会话有效期设长一点
    
  • 强制启用TLS 1.3:TLS1.3比TLS1.2握手快太多(1-RTT甚至0-RTT),大幅降低握手延迟。配置:
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    
  • 选高效的加密套件:优先选AMD CPU友好的低开销套件,比如CHACHA20(比AES更适合ARM/AMD架构),配置:
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
    
  • 启用SSL会话票据(Session Tickets):比会话缓存更灵活,适合分布式场景,也能减少客户端重新握手的概率:
    ssl_session_tickets on;
    

二、Nginx核心连接配置优化(适配32核服务器)

充分利用你的硬件资源,让Nginx能处理更多连接:

  • Worker进程数:你现在设为24,建议直接拉满到CPU线程数(32),或者让Nginx自动适配:
    worker_processes auto;  # 或者手动写32
    
    7950X3D是16物理核32线程,用32个worker能最大化利用每个线程的算力。
  • Worker连接数:提高每个worker能处理的最大连接数,同时要配合系统文件句柄限制:
    events {
        use epoll;               # 用Linux高效的epoll事件模型
        multi_accept on;         # 让worker一次性接受多个连接,提高效率
        worker_connections 10240; # 每个worker最多处理10240个连接
    }
    
    然后修改系统文件句柄限制:
    在/etc/security/limits.conf加:
    nginx soft nofile 65535
    nginx hard nofile 65535
    
    在/etc/sysctl.conf加:
    fs.file-max = 1000000
    
  • 短连接优化:针对无KeepAlive的场景,及时释放连接资源:
    reset_timedout_connection on;  # 主动关闭超时连接
    keepalive_timeout 65;          # KeepAlive超时时间(默认75,可调短)
    keepalive_requests 1000;       # 每个KeepAlive连接最多处理1000个请求(适合带-k场景)
    

三、系统内核TCP参数优化(解决短连接瓶颈)

短连接场景下,TIME_WAIT状态的连接堆积会占满端口,导致新连不进来,必须调内核参数:
在/etc/sysctl.conf加以下配置,然后执行sysctl -p生效:

net.core.somaxconn = 65535          # 提高TCP监听队列长度,避免连接被拒绝
net.ipv4.tcp_syncookies = 1         # 防止SYN洪水攻击,不影响正常连接
net.ipv4.tcp_tw_reuse = 1           # 允许复用TIME_WAIT状态的连接,对短连接极其有用
net.ipv4.tcp_fin_timeout = 30       # 缩短TIME_WAIT超时时间,更快释放端口
net.ipv4.tcp_max_tw_buckets = 5000  # 限制TIME_WAIT连接的最大数量

四、系统化性能调优流程

给你一套可落地的流程,确保你能逐步找到最优配置:

  1. 基准测试:先固定当前配置,用ab或更专业的wrk做压测,记录RPS、延迟、CPU/内存/网络使用率,作为基准线。
  2. 瓶颈定位:
    • 用vmstat、mpstat看CPU:你的数据显示不带-k时sy(系统CPU)只有1-2%,说明CPU没跑满,瓶颈在连接建立;
    • 用ss -s看连接状态:如果TIME_WAIT数量很多,就是短连接的端口堆积问题;
    • 抓包验证:用tcpdump抓SSL握手包,看每次请求是否都要重新握手。
  3. 分步优化:每次只改一个配置,改完就压测,对比结果:
    • 先改SSL配置(会话缓存、TLS1.3),测不带-k的RPS变化;
    • 再调Nginx worker参数;
    • 最后改内核TCP参数。
  4. 持续监控:上线后用工具监控Nginx的连接数、RPS、延迟,还有服务器的CPU、内存、网络,及时发现新瓶颈。

针对你的测试数据的额外建议

  • 你带-k时能到50k RPS,但CPU还是有空闲,说明还能往上冲,可以试试提高keepalive_requests到10000,或者用wrk模拟更多并发;
  • 不带-k时的核心问题是SSL握手,先启用SSL会话缓存和TLS1.3,应该能把RPS提升到几万级别;
  • 测试工具可以换wrk,比ab更准确,支持多线程和自定义脚本,能模拟更真实的负载:
    wrk -t 10 -c 1000 -d 30s https://***.com/TestHealth
    

备注:内容来源于stack exchange,提问作者0xPwn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:32:59