在 nginx 中,worker_connections、keepalive_timeout 和 $connection 之间有什么关系?

14

nginx文档说:

max_clients = worker_processes * worker_connections

但是保持活动状态如何影响这个问题呢?我的配置设置了2个worker_processes和8192个worker_connections;这意味着理论上最多可以处理16384个并发连接。同时推送16384个数据流是非常巨大的,但是如果我有一个60秒的keepalive_timeout,那么每个客户端独占一个连接1分钟,这个数字就完全不同了。那它究竟是什么?

与此相关的是$connection变量,可以在log_format指令中使用。我定义了以下日志格式,以便分析服务器的性能:

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

那个$connection变量报告了大约1100-1200万个连接!我不是一个数学专业的人,但显然这个数字比worker_processes * worker_connections要高得多。那么它应该代表什么?

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

2个回答

9

$connection是一个计数器,而不是当前正在使用的连接总数。因此它是有意增长的。

保持活动连接不能被丢弃,因此房间大小为worker_processes * worker_connections - keepalive连接数。


一个计数器!现在你这么说我能看到模式了。谢谢你回答这样一个晦涩的问题。 - Daniel

1
想象一下整个场景:首先客户端连接到您,获取文件,然后浏览器保持连接60秒。另一个客户端连接,获取并保持其连接。在第一分钟结束时,您可能会有(在最坏的情况下)所有客户端在过去60秒内从您请求了某些内容,仍然保持着他们的连接。
因此,在最坏的情况下,您将每秒为“worker_processes * worker_connections / keep_alive”提供服务,即大约为260个。如果您需要更多,请分配更多连接-仅用于提供keepalives:请阅读我的答案Tuning nginx worker_process to obtain 100k hits per min 据我所知,nginx可以在2.5mb的内存中保存10k个非活动(keepalived)连接,因此增加worker_connections非常便宜。我认为这里的主要瓶颈可能是您的操作系统本身。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接