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的良好值。
答案 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便宜,非常便宜。我认为这里的主要瓶颈可能是你的操作系统本身