首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx在64位平台上存储TCP连接的状态有多大?

Nginx在64位平台上存储TCP连接的状态有多大?
EN

Stack Overflow用户
提问于 2022-06-02 10:17:01
回答 1查看 53关注 0票数 0

在阅读了Nginx的区域区域文档之后,我感到很困惑。尽管它们都使用$binary_remote_addr变量来存储密钥,但它们描述了空间占用的不同大小。请问这是文件错误吗?在64位平台上存储TCP连接状态需要多少空间?

来自limit_conn_zone中的描述。

注意,这里使用的不是$remote_addr,而是$binary_remote_addr变量。$remote_addr变量的大小可以从7字节到15字节不等。存储状态在32位平台上占据32或64字节的内存,在64位平台上总是占据64字节。$binary_remote_addr变量的大小始终是IPv4地址的4个字节或IPv6地址的16个字节。存储状态总是在32位平台上占据32或64字节,在64位平台上占64字节。

来自limit_req_zone中的描述。

注意,这里使用的不是$remote_addr,而是$binary_remote_addr变量。$binary_remote_addr变量的大小始终是IPv4地址的4个字节或IPv6地址的16个字节。存储状态在32位平台上总是占64字节,在64位平台上占128字节.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-02 14:08:34

这两个指令都定义了共享内存中的一个区域,该区域包含从键到某种状态的映射。您将密钥的大小与状态的大小相错。此外,他们不需要使用$binary_remote_addr变量作为键。实际上,您是通过指令( key )的第一个参数来决定将哪个变量用作键的人。

通过映射,我指的是一个函数/数据结构,给定一个键返回一个与该键相关联的值。相同的键总是返回相同的值。这类似于字典(抽象数据类型),可以使用哈希表(数据结构)来实现。我不确定NGINX实现是否具体使用了这些类型,但这是可能的。阅读它们可能会帮助你更好地理解这个话题。然而,NGINX将这种映射称为“区域”。

在这两个指令中,您都定义了一个区域,并且能够指定用作键的变量。这将决定哪些请求/连接被分组为相同的值,哪些不是。并以$binary_remote_addr为例进行了分析。在这种情况下,共享远程地址的所有请求/连接将被分组为区域中的一个值。

最后,对于存储的状态--这是与键关联的值。您可以将内存的抽象布局想象为:

代码语言:javascript
复制
[key1] ---> { some state stored in the zone, associated with key1 }
[key2] ---> { some other state, associated with key2 }
etc.

现在,重要的是,当它们使用相同的键来索引数据时,每个指令都会在区域中存储不同的信息。两者的定义从以下几个方面开始:

为共享内存区域设置参数,该区域将保留各种键的状态。

因为这是区域的通用定义。区别他们的是以“特别是”开头的句子:

特别是,州存储当前过多请求的数量。

对于limit_req_zone

特别是,状态包括当前连接数。

为了limit_conn_zone

由每个指令创建的区域将在与键关联的状态中存储不同的信息。在一种情况下,请求过多,而在另一种情况下,则是连接的数量。由于信息是不同的,它的大小也不同是很自然的。因此,每个指令都将“存储状态”的大小描述为不同的值。它们可能(但不需要,您决定)使用与键相同的变量,例如$binary_remote_addr。在这种情况下,键的大小将是相同的,但它们与每个区域中与这些键关联的状态的大小无关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72474544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档