Wil*_*lem 5 performance nginx memory-usage
我有 1M 静态重写规则并使用此映射配置。如何确定的最佳值map_hash_max_size和map_hash_bucket_size?我想优化内存消耗。关于这一点的文档非常少。
别人在 Nginx 论坛上问过,但没有回应。
小智 5
我对server_names_hash_bucket_sizeand的源代码进行了分析server_names_hash_max_size,我猜它使用与地图相同的哈希值。
这是我的答案的通用副本:
max_size,只要它抱怨就先增加。如果数字超过某个大数字(例如 32769),bucket_size只要它抱怨,就增加到平台上默认值的倍数。如果它不再抱怨,max_size只要它不抱怨就减少。现在您已为您的一组键设置了最佳设置(每组键可能需要不同的设置)。max_size意味着消耗更多内存(每个工作人员或服务器一次,如果您知道,请发表评论)。bucket_size意味着更多的 CPU 周期(对于每个键查找)和更多从主内存到缓存的传输。max_size与键数没有直接关系,如果键数翻倍,可能需要增加max_size10倍甚至更多以避免冲突。如果您无法避免它们,则必须增加bucket_size。bucket_size 据说要增加到下一个 2 的幂,从源代码我判断它应该足以使它成为默认值的倍数,这应该保持传输到缓存的最佳状态。bucket_size取决于密钥的长度。如果平均密钥大小为 32 字节(带有哈希数组开销),增加到bucket_size512 字节将意味着它可以容纳 16 个具有冲突哈希密钥的密钥。这不是您想要的,如果发生碰撞,它会线性搜索。您希望尽可能减少碰撞。max_size 小于 10000和 small bucket_size,则可能会遇到很长的加载时间,因为 nginx 会尝试在循环中找到最佳哈希大小。max_size大于 10000,则在它会抱怨之前将“仅”执行 1000 次循环。关于哈希值和存储桶大小的 nginx 文档非常模糊。这些数字是用字节表示的吗?参赛作品?
我有一个 128,592 字节的映射文件,其中包含 1351 个条目。适用于本例的最小值为:
map_hash_bucket_size 128;
map_hash_max_size 45948;
Run Code Online (Sandbox Code Playgroud)
我不知道这些数字之间有什么关系。我通过将存储桶大小增加到 128,然后对最大大小进行二分搜索来得到它们。
| 归档时间: |
|
| 查看次数: |
3235 次 |
| 最近记录: |