加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

Nginx:1M map的最佳map_hash_max_size和map_hash_bucket_size?

发布时间:2020-12-13 21:10:22 所属栏目:Nginx 来源:网络整理
导读:我有1M静态重写规则并使用this map configuration.如何确定map_hash_max_size和map_hash_bucket_size的最佳值?我想优化内存消耗. documentation对此非常小. 别人asked it on the Nginx forum,但没有回应. 最佳答案 我对server_names_hash_bucket_size和serv

我有1M静态重写规则并使用this map configuration.如何确定map_hash_max_size和map_hash_bucket_size的最佳值?我想优化内存消耗. documentation对此非常小.

别人asked it on the Nginx forum,但没有回应.

最佳答案
我对server_names_hash_bucket_size和server_names_hash_max_size的源代码进行了分析,我猜它使用与地图相同的哈希.

这是answer的通用副本:

>一般建议是保持两个值尽可能小.
>如果nginx抱怨,只要它抱怨,就会先增加max_size.如果数字超过某个大数字(例如32769),就将bucket_size增加到您平台上的默认值的倍数.如果它不再抱怨,只要它没有抱怨就减少max_size.现在,您可以为您的一组键设置最佳设置(每组键可能需要不同的设置).
>更大的max_size意味着消耗更多的内存(每个工作者或服务器一次,如果你知道,请发表评论).
>更大的bucket_size意味着更多的CPU周期(对于每个键查找)以及从主内存到缓存的更多传输.
> max_size与键的数量直接无关,如果键的数量加倍,则可能需要增加max_size 10次甚至更多以避免冲突.如果你无法避免它们,你必须增加bucket_size.
> bucket_size据说会增加到下一个2的幂,从源代码我会判断它应该足以使它成为默认值的倍数,这应该保持传输到缓存最优.
> bucket_size的大小取决于键的长度.如果平均密钥大小为32字节(具有散列数组开销),则将bucket_size增加到512字节意味着它可以容纳具有冲突散列密钥的16个密钥.如果碰撞发生在it searches linearly,这不是你想要的东西.你希望尽可能减少碰撞.
>如果你有max_size less than 10000和小bucket_size,你会遇到很长的加载时间,因为nginx会尝试在循环中找到最佳的散列大小.
>如果你的max_size大于10000,那么在它抱怨之前会执行“仅”1000个循环.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读