nginx

设置哈希表


english
русский

简体中文
עברית
日本語
türkçe

新闻 [en]
nginx 介绍
下载 [en]
安全漏洞 [en]
文档
FAQ
外部连接 [en]
书籍 [en]
支持 [en]
捐献 [en]

trac
wiki
twitter
nginx.com

为了快速处理静态的数据集合,诸如虚拟主机名、 map指令的值、 MIME类型和请求头的字段名,nginx使用了哈希表。 在nginx启动和更新配置的过程中,它会尽可能为哈希表选择最小的容量, 同时使每个哈希桶的长度不超过设置的配置参数。这些桶用于保存键和对应的哈希值。 整个哈希表的容量以哈希桶的数量来定义。 nginx不断调整哈希表直到哈希表容量超过配置的最大值。 大部分哈希表都有对应的指令,允许修改这些配置参数。 比如,针对虚拟主机名的哈希表,有server_names_hash_max_sizeserver_names_hash_bucket_size两条指令。

哈希桶大小的参数会对齐到处理器缓存线长度的整数倍。 这将加速哈希表中的键查找,因为在现代的处理器上,这可以减少内存访问的次数。 如果哈希桶大小等于处理器的缓存线长度,那么在最坏情况下,键查找时的内存访问次数是两次—— 第一次是计算哈希桶的地址,第二次是在哈希桶内进行键查找。 因此,如果nginx提示需要增大哈希表容量或者哈希桶大小时,应优先增大前者。

翻译: cfsego