O que pode levar à exaustão da memória da zona e como o Nginx reage a ela?

2

Qual é o cenário possível para esgotar a memória designada para uma zona de conexão com limit_conn_zone directiva e quais são as implicações neste caso?

Suponha que eu tenha isso na minha configuração:

http {
  limit_conn_zone $binary_remote_addr zone=connzone:1m;
  ...
  server {
    limit_conn connzone 5;

que, de acordo com a documentação, aloca 16000 estados para connzone em um servidor de 64 bits. Também diz que

If the storage for a zone is exhausted, the server will return error 503 (Service Temporarily Unavailable) to all further requests.

Bem, ok. Mas o que isso significa na prática? Quando isso acontece? Quem recebe esses 503s? Isso significa que, se o número de IPs de alguma forma associado a connzone atingir 16000, todos receberão um 503 e tudo estará terminado? Como o Nginx decide? A documentação é estranhamente vaga sobre isso.

Então, considerando a configuração de exemplo, quem realmente obteria um 503 e sob quais circunstâncias e como as coisas iriam a partir daí? Mesmo com zonas de solicitação ?

    
por Miles Hughes 07.12.2012 / 22:06

2 respostas

1
Pratique? Você pode controlar a quantidade total de IPs conectados ao servidor.

Quando? Bem, se a zona está cheia.

Quem? Sim, todos que ainda não estão dentro da zona e enquanto a zona estiver cheia.

Se você estiver em um sistema de 64 bits e definir a zona como 1M, o nginx poderá armazenar até 16.000 IPs. Isso significa que, se 16.001 IPs tiverem que ser armazenados, o usuário +1 receberá o primeiro erro 503. A decisão é bem fácil, se a B-tree estiver cheia, rejeite.

Você pode descobrir a implementação exata lendo o código-fonte do módulo: link

As zonas de solicitação funcionam bem parecidas.

    
por 08.12.2012 / 02:52
1

Citação do link

The server will be able to track the number of connections for ~16k distinct client IP addresses. If you happen to have that many active clients, then the next connection attempt from the client whose IP is not yet known will attempt to create a new state, that will fail because zone is exhausted and the client will be returned 503.

Portanto, se a contagem de conexões diminuir abaixo de 16000 (ou seja qual for o limite), a conexão futura não receberá 503.

    
por 11.01.2015 / 16:29