Eu fiz uma análise do código-fonte para server_names_hash_bucket_size e server_names_hash_max_size , acho que ele usa o mesmo hash do mapa.
Aí vem uma cópia generalizada da minha resposta :
- A recomendação geral seria manter os dois valores o menor possível.
- Se reclamações do nginx aumentam
max_sizeprimeiro, desde que se queixem. Se o número exceder um número grande (32769, por exemplo), aumentebucket_sizepara múltiplos de valor padrão em sua plataforma, desde que se queixem. Se não reclamar mais, diminuamax_sizedesde que não reclame. Agora você tem a melhor configuração para o seu conjunto de chaves (cada conjunto de chaves pode precisar de configuração diferente). - Maior
max_sizesignifica mais memória consumida (uma vez por funcionário ou servidor, por favor, comente se você souber). - Maior
bucket_sizesignifica mais ciclos de CPU (para cada consulta de chave) e mais transferências da memória principal para o cache. -
max_sizenão está relacionado ao número de chaves diretamente, se o número de chaves duplicar, você pode precisar aumentarmax_size10 vezes ou até mais para evitar colisões. Se você não pode evitá-los, você tem que aumentarbucket_size. -
Diz-se que
bucket_sizeé aumentado para a próxima potência de dois, a partir do código-fonte que eu julgaria que deveria ser suficiente para torná-lo múltiplo do valor padrão, isso deve manter as transferências em cache ideais. - O tamanho de
bucket_sizedepende do tamanho das suas chaves. Se o tamanho médio da chave for de 32 bytes (com sobrecarga de matriz de hash), o aumento debucket_sizea 512 bytes significaria que ele pode acomodar 16 chaves com chave hash de colisão. Isso não é algo que você quer, se a colisão acontecer ele procura linearmente . Você quer ter menos colisões possíveis. - Se você tem
max_sizemenor que 10000 e pequenabucket_size, você pode se deparar com um longo tempo de carregamento porque o nginx tentaria encontrar o tamanho de hash ideal em um loop. - Se você tiver
max_sizemaior que 10000, haverá "apenas" 1000 loops realizados antes de reclamar.