跳转到内容

性能调优

本页介绍影响数据面吞吐量、延迟和资源使用的配置选项。默认值适用于中等流量(每秒数百至数千请求)。对于更高吞吐量场景或资源受限环境,以下参数可在性能、内存消耗和运维安全之间进行权衡。

数据面使用基于 Tokio 的异步运行时。以下设置控制工作在线程间的分配方式:

参数类型默认值说明
runtime_tuning.http_capacity.workerThreadsint0工作线程数(0 = CPU 核心数)
runtime_tuning.http_capacity.acceptConcurrencyint16并发 TCP accept 操作数

默认值 0 使运行时为每个可用 CPU 核心创建一个工作线程。此配置对于 CPU 密集型工作负载(TLS 终止、请求头操作和 Wasm 过滤器执行均受益于并行 CPU 访问)是最优的。

对于大部分时间在等待上游响应的 I/O 密集型工作负载,减少工作线程数可为其他进程释放 CPU 资源。当代理主要转发请求且转换操作极少时,将此值设置为低于 CPU 核心数。

acceptConcurrency 控制可同时调用监听 socket 的 accept() 的线程数。默认值 16 可有效处理连接突发。对于极高连接速率的工作负载(每秒数万新连接),增加此值。如果性能分析显示 accept 相关竞争,则降低此值。

复用上游服务连接可避免每次请求的 TCP 握手和 TLS 协商开销。连接池对于延迟敏感型工作负载至关重要。

参数类型默认值说明
runtime_tuning.http_capacity.upstreamKeepalivePoolSizeint32768上游池中保持的最大空闲连接数

上游 keepalive 池维护与后端服务的空闲连接。当数据面需要转发请求时,先检查池中是否有可用连接,然后再建立新连接。每个空闲连接消耗少量内存(数 KB 的 socket 缓冲区),因此内存成本随池大小线性增长。

数据面可缓存上游响应。条目大小限制控制可存储的单个响应的最大体积:

参数类型默认值说明
runtime_tuning.http_cache.maxEntrySizeMbint16单个缓存响应条目的最大大小(MiB)

大于 maxEntrySizeMb 的响应会跳过缓存并直接流式传输给客户端。对于提供大体积可缓存负载的工作负载可调高此值;调低则可限制单条目的内存占用。

超时配置可防止资源泄漏,确保代理不会无限期持有连接。以下均为直接位于 runtime_tuning 下的扁平键(不存在嵌套的 timeout 对象),单位均为毫秒:

参数类型默认值说明
runtime_tuning.downstreamReadTimeoutMsint60000从客户端读取请求的最大时间
runtime_tuning.upstream_connection_timeout_msint5000与上游建立连接的最大时间
runtime_tuning.upstream_read_timeout_msint30000从上游读取响应的最大时间
runtime_tuning.upstream_idle_timeout_msint60000关闭上游 keepalive 连接前的最大空闲时间

当后端不可达时,调低 upstream_connection_timeout_ms 可快速失败;对于缓慢或长时间运行的上游端点,调高 upstream_read_timeout_ms

代理运行时不提供 TLS 会话缓存调优项。TLS 协议版本上下界(runtime.tls_min_version / runtime.tls_max_version)以及证书/mTLS 设置见 TLS 配置

在调整调优参数之前,使用可用指标建立性能基线:

  1. 延迟分布 — 通过数据面指标端点跟踪 p50、p95 和 p99 响应时间
  2. 错误率 — 监控 HTTP 5xx 响应和连接错误
  3. 资源使用 — 观察当前流量水平下的 CPU 和内存消耗
  4. 连接池效率 — 跟踪 upstream_keepalive_pool_hitsupstream_keepalive_pool_misses 的比率

逐步调整参数,在每次调整后测量对各项指标的影响,然后再进行下一次调整。记录基线和每次变更以供将来参考。

数据面在生产构建中链接 jemalloc,相比系统分配器具有更好的内存碎片化行为和更低的尾部延迟。分配器通过 --features jemalloc 编译标志选择。

对于并发连接数非常大的工作负载,jemalloc 的线程缓存和后台线程特性可减少分配争用。监控 nantian_gw_dataplane_container_memory_working_set_bytes 以验证分配器在你的流量配置下表现良好。

对于高吞吐量部署,可考虑调整以下环境级别参数:

参数类型默认值描述
runtime_tuning.http_capacity.bufferPoolSizeint1024可复用的缓冲区 slab 数量
runtime_tuning.http_capacity.maxHeaderSizeint65536每个请求最大请求头字节数(64 KiB)
runtime_tuning.http_capacity.maxBodySizeint10485760每个请求最大请求体字节数(10 MiB)

对于突发请求量大的工作负载,增大 bufferPoolSize 可减少每次请求的分配开销。如果上游只接受小负载,降低 maxBodySize 可限制恶意请求的内存窗口。