设置哈希表
为了快速处理静态数据集,例如服务器名称、map 指令的值、MIME 类型、请求头字符串的名称,nginx 使用哈希表。在启动和每次重新配置期间,nginx 会选择哈希表的最小可能大小,以便存储具有相同哈希值的键的桶大小不超过配置的参数 (哈希桶大小)。表的大小以桶为单位表示。调整会继续进行,直到表大小超过 hash max size 参数。大多数哈希都有相应的指令来更改这些参数,例如,对于服务器名称哈希,它们是 server_names_hash_max_size 和 server_names_hash_bucket_size。
哈希桶大小参数会对齐到处理器缓存行大小的倍数。这通过减少内存访问次数,加快了在现代处理器上进行哈希中的键查找。如果哈希桶大小等于一个处理器缓存行大小,那么在最坏情况下,键查找期间的内存访问次数将是两次 — 第一次是计算桶地址,第二次是在桶内查找键。因此,如果 nginx 发出消息请求增加 hash max size 或 hash bucket size,则应该首先增加第一个参数。