Nginx 10k conexões simultâneas

7

Não podemos lidar com mais de 3k solicitações simultâneas no nginx (tempo limite do Connecton). Nós mudamos também o ulimit para 20000. A seguir estão meus arquivos nginx.conf e sysctl.conf:

user www-data; 
worker_processes 4; 
pid /var/run/nginx.pid;
events {
     worker_connections 5000;
     use epoll;
     # multi_accept on; 
} # took it in next line
worker_rlimit_nofile    100000;

http {
     sendfile on;
     tcp_nopush on;
     tcp_nodelay on;
     keepalive_timeout 600;
     send_timeout 600;
     proxy_connect_timeout       600;
     proxy_send_timeout          600;
     proxy_read_timeout          600;
     reset_timedout_connection on;
     types_hash_max_size 2048;
     client_header_buffer_size 5k;
     open_file_cache max=10000 inactive=30s;
     open_file_cache_valid    60s;
     open_file_cache_min_uses 2;
     open_file_cache_errors   on;
     include /etc/nginx/mime.types;
     default_type application/octet-stream;
     access_log off; 
     error_log /var/log/nginx/error.log;
     gzip on;
     gzip_disable "msie6";
     include /etc/nginx/conf.d/*.conf;
     include /etc/nginx/sites-enabled/*; 
}

systel.conf

# Increase size of file handles and inode cache
fs.file-max = 2097152

# Do less swapping
vm.swappiness = 10
vm.dirty_ratio = 60
vm.dirty_background_ratio = 2

### GENERAL NETWORK SECURITY OPTIONS ###

# Number of times SYNACKs for passive TCP connection.
net.ipv4.tcp_synack_retries = 2

# Allowed local port range
net.ipv4.ip_local_port_range = 2000 65535

# Protect Against TCP Time-Wait
net.ipv4.tcp_rfc1337 = 1

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15

# Decrease the time default value for connections to keep alive
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15

### TUNING NETWORK PERFORMANCE ###

# Default Socket Receive Buffer
net.core.rmem_default = 31457280

# Maximum Socket Receive Buffer
net.core.rmem_max = 12582912

# Default Socket Send Buffer
net.core.wmem_default = 31457280

# Maximum Socket Send Buffer
net.core.wmem_max = 12582912

# Increase number of incoming connections
net.core.somaxconn = 65536

# Increase number of incoming connections backlog
net.core.netdev_max_backlog = 65536

# Increase the maximum amount of option memory buffers
net.core.optmem_max = 25165824

# Increase the maximum total buffer-space allocatable
# This is measured in units of pages (4096 bytes)
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144

# Increase the read-buffer space allocatable
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.udp_rmem_min = 16384

# Increase the write-buffer-space allocatable
net.ipv4.tcp_wmem = 8192 65536 16777216
net.ipv4.udp_wmem_min = 16384

# Increase the tcp-time-wait buckets pool size to prevent simple DOS attacks
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

Estamos usando o sistema operacional do Ubuntu com 4 CPUs e 8 GB de RAM. Eu dificilmente vejo qualquer uso de CPU e RAM. Estou apenas acionando o URL da página padrão do nginx.

    
por user50442 12.12.2014 / 17:19

2 respostas

5

Eu sugiro strongmente que você use o micro-cache.

Exemplo: link link

Recentemente, configurei o micro-caching na minha caixa. Com o benchmark do Apache, ele suporta até 50.000 conexões, e o CPU é de apenas 6%. Sem tempo limite, a página é veiculada em 1,1 ms.

Esses exemplos de manuais acima eu sugiro apenas para "somente visualização", porque eles não estão corretos. No meu caso, passei muitas horas configurando isso, mas vale a pena enfatizar:)

    
por 14.12.2014 / 20:26
1

Você mencionou que definiu o limite de arquivos do usuário para 20.000, mas não como ...

No Ubuntu, você altera os limites hard e soft em /etc/security/limits.conf Supondo que o usuário que está executando o nginx seja www-data , você adicionaria isso no final do arquivo:

www-data soft nofile 100000
www-data hard nofile 120000
www-data soft nproc 100000
www-data hard nproc 120000

Se você quiser verificar qual o seu limite atual é executado:

su - www-data
ulimit -Hn
ulimit -Sn
    
por 09.07.2015 / 16:34

Tags