【问题标题】:In nginx, what is the relationship between worker_connections, keepalive_timeout and $connectionnginx中worker_connections、keepalive_timeout和$connection是什么关系
【发布时间】:2023-03-04 07:03:03
【问题描述】:

nginx 文档说

max_clients = worker_processes * worker_connections

但是,keepalive 因素是如何影响这一点的呢?我的配置设置有 2 个 worker_processes 和 8192 个 worker_connections;这意味着我理论上最多可以处理 16384 个并发连接。同时推出 16384 个数据流是巨大的,但如果我有一个 60 秒的 keepalive_timeout,那么每个客户端占用一个连接 1 分钟,这个数字具有完全不同的含义。是哪个?

连接到这一切的是可以与 log_format 指令一起使用的 $connection 变量。我定义了以下日志格式,以便分析服务器的性能:

log_format  perf  '$request_time $time_local $body_bytes_sent*$gzip_ratio $connection $pipe $status $request_uri';

$connection 变量报告的连接数约为 11-12 百万!我不是数学专业的,但显然这个数字远高于 worker_processes * worker_connections。那么它应该代表什么?

简而言之,我试图弄清楚如何确定worker_connection 的良好价值。

【问题讨论】:

    标签: nginx


    【解决方案1】:

    $connection 是一个计数器,而不是现在使用的连接总数。所以它打算增长。

    keepalive连接不能丢弃,所以房间是worker_processes * worker_connections - keepalive连接

    【讨论】:

    • 计数器!既然你这么说,我可以看到模式。感谢您回答这样一个晦涩难懂的问题。
    【解决方案2】:

    想象一下整个画面:第一个客户端连接到您,获取一个文件,然后浏览器保持连接 60 秒。另一个客户端也连接、获取并保持其连接。在第一分钟结束时,您可能(在最坏的情况下)在过去 60 秒内所有客户端都向您请求了一些东西,但仍然保持他们的连接打开

    因此,在最坏的情况下,您将在一秒钟内提供“worker_processes * worker_connections / keep_alive”连接,即您的号码大约为 260。如果你需要更多,你应该分配更多的连接 - 只是为了服务keepalives:阅读我的回答者Tuning nginx worker_process to obtain 100k hits per min

    afaik nginx 可能会在 2.5mb 的内存中保存 10k 的非活动(keepalived)连接,因此增加 worker_connections 很便宜,非常便宜。我认为这里的主要瓶颈可能是您的操作系统本身

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-23
      • 2022-12-28
      • 2014-07-13
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      相关资源
      最近更新 更多