优化服务器域名的散列表大小

如下,如果在 server_name 中配置了一个很长的域名,那么重载 Nginx 时会报错,因此需要使用 server_names_hash_max_size 来解决域名过长的问题,该参数的作用是设置存放域名的最大散列表的存储桶的大小,根据 CPU 的一级缓存大小来设置。

server {
        listen       80;
        server_name  www.abcdefghijklmnopqrst.com;        # 配置一个很长的域名
        location / {
            root   html/www;
            index  index.html index.htm;
        }
    }
[[email protected] conf]# /usr/local/nginx/sbin/nginx -t     # 如果配置的域名很长会出现如下错误
nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
[[email protected] ~]# cat /usr/local/nginx/conf/nginx.conf......
http {
    include       mime.types;
    server_names_hash_bucket_size  512;     # 配置在 http 区块,默认是 512kb ,一般设置为 cpu 一级缓存的 4-5 倍,一级缓存大小可以用 lscpu 命令查看
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server_tokens off;
    include vhosts/*.conf;
}
时间: 2024-08-03 18:32:12

优化服务器域名的散列表大小的相关文章

Python数据结构——散列表

散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的推广.如果空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以运用直接寻址技术. 当实际存储的关键字比可能的关键字总数较小时,采用散列表就比较直接寻址更为有效.在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标,这种 关键字与下标之间的映射就叫做散列函数. 1.散列函数

散列表

散列表的基本思想通过键来直接计算出数据的存放地址,而避免了数组或者其他数据结构的逐个比较查找. 可以在常数时间内实现查找.插入和删除操作,代价是不支持任何有关排序的操作. 键到地址的映射,称作散列函数.散列函数需要满足两个要求:计算简单:冲突少. 不同的情况,可以有不同的散列函数,在此不对散列函数做过多介绍. 冲突:相同的键,通过散列函数,被映射到了相同的地址.下面主要介绍下解决冲突的一些简单方法. 分离链表法:把散列到同一个地址的数据保存在一个链表中.在查询数据时,先通过散列函数求出链表地址,

开放定址散列表

// kaifangliaobiao.cpp : 定义控制台应用程序的入口点. //使用平方探测解决冲突问题时,散列表至少空一半时,总能插入一个新的元素 #include "stdafx.h" #include<iostream> using namespace std; #ifndef HashQuad typedef unsigned int Index; typedef Index Position; struct HashTbl; typedef struct Ha

算法_散列表

使用散列的查找算法分为两步,第一步用散列函数将被查找的键转化为数组的一个索引,理想情况下不同的键都被转化为不同的索引值.而当多个键散列到相同的索引值的情况下,就需要处理碰撞冲突,为此有两种方法,拉链法和线性探测法. 散列函数用于通过键来获取其对应的索引值.好的散列函数应该具有计算简便,等价的键必然产生相等的散列值,均匀的散列所有的键的条件. 一.基于拉链法的散列表. 拉链法对于碰撞处理的解决方法是将大小为M的数组中的每个元素都指向一个链表,链表中的每一个节点都存储了散列值为该元素的索引的键值对.

数据结构散列表

散列表 散列表是一个包含关键字的具有固定大小的数组,表的大小记为 tablesize .每个关键字被映射到0到 tablesize 中的某个数,并被放到适当的单元中,这个映射称为散列函数.散列函数应尽可能地在单元之间均匀分配关键字.最后还需要解决关键字冲突的情况,即映射到同一个值. 通常需要均匀的分布关键字,需要我们选择一个适合的散列函数. 关于散列函数可以查看上一篇:常见的散列函数 散列表的负载因子为散列表中的元素个数和散列表大小的比值. 一般选择表的大小为素数,以避免一些特殊性质造成的冲突.

散列表(哈希表)的实现

散列函数直接用key%size的形式,size为散列表的大小. 冲突处理采用平方探测法,为保证可以探测到整个散列表空间,散列表大小设置为4k+3形式的素数. 当散列表中的元素过多时会造成性能下降,这时应该倍增散列表的大小,重新计算原来散列表中每个元素在新的散列表中的位置. 散列表的实现 <span style="font-size:18px;">// HashTable.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h"

数据结构_散列表

散列表的查找技术 我们学过的查找技术都是通过一系列的给定值与关键码的比較,查找效率依赖于查找过程中进行的给定值与关键码的比較次数. 而散列表的查找不用比較.通过关键码直接确定存储位置. 在存储位置和关键码之间建立一个确定的相应关系. 散列表的基本思想:在记录的存储地址和他的关键码之间建立一个确定的相应关系. 这样.不经过比較,一次读取就能得到所查元素的查找方法. 散列表:採用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表. 散列函数:将关键码映射为散列表中适当存储位置的函

散列表之链接法

散列表之链接法 散列表的定义 散列表的基本操作 散列表的编码实现 散列表的设计 主测试文件 编译运行 结论 注意: 本文中的所有代码你可以在这里 https://github.com/qeesung/algorithm/tree/master/chapter11/11-2/hashTable(这里会及时更新) 或者这里 http://download.csdn.net/detail/ii1245712564/8804203 找到 散列表之链接法 在之前的文章<散列表之直接寻址表>中介绍了散列表

散列表的开放寻址法

开放寻址法(open addressing)中,所有元素都存放在槽中,在链表法散列表中,每个槽中保存的是相应链表的指针,为了维护一个链表,链表的每个结点必须有一个额外的域来保存它的前戏和后继结点.开放寻址法不在槽外保存元素,不使用指针,也不必须为了维护一个数据结构使用额外的域,所有可以不用存储指针而节省的空间,使得可以用同样的空间来提供更多的槽,也潜在地减少了冲突,提高了检索速度. 为了使用开放寻址法插入一个元素,需要连续地检查散列表,或称为探查(probe),直到找到一个空槽来放置待插入的关键