在nginx中,worker_connections,keepalive_timeout和$ connection之间的关系是什么

时间:2009-08-11 06:31:26

标签: nginx

nginx文档说

max_clients = worker_processes * worker_connections

但是如何将keepalive因素纳入其中?我的配置设置有2个worker_processes和8192个worker_connections;这意味着我理论上可以处理最多16384个并发连接。同时推出16384个数据流是巨大的,但如果我有60s 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的良好值。

2 个答案:

答案 0 :(得分:9)

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

不能丢弃Keepalive连接,因此房间是worker_processes * worker_connections - keepalive connections

答案 1 :(得分:1)

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

所以,在最坏的情况下,你将服务" worker_processes * worker_connections / keep_alive"一秒钟内连接,即你的号码大约260。如果你需要更多,你应该分配更多的连接 - 只是为了服务Keepalive:在Tuning nginx worker_process to obtain 100k hits per min读取我的答案

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