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

前端之家收集整理的这篇文章主要介绍了Nginx:1M map的最佳map_hash_max_size和map_hash_bucket_size?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有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个循环.

猜你在找的Nginx相关文章