Identificando o gargalo com o teste de carga do nginx VPS

4

Estou tentando otimizar uma gota do Oceano Digital (512mb), testando usando loader.io

Estou testando na minha página inicial, que é HTTPS / PHP. Eu configurei o cache da página FastCGI, que me levou de 100 req / seg para 2.000 req / seg.

Mas qualquer coisa além de 2.000 req / seg está resultando em muitos tempos de espera e respostas lentas (vai da média de 20ms para a média de 1500ms). Estou tentando identificar o gargalo. Ainda não é CPU / memória, porque a carga mal chega a 0,30 e o uso da memória é cerca de metade. Tentei redimensionar para uma gota muito maior e os tempos limite ainda acontecem.

Não é FastCGI porque o desempenho do teste de carga é quase idêntico em um arquivo .html básico.

Durante os tempos limite, error.log está vazio. Nada parece estar jogando erros (que eu posso encontrar). Kern.log tem este log:

TCP: Possible SYN flooding on port 80. Sending cookies.  Check SNMP counters
TCP: Possible SYN flooding on port 443. Sending cookies.  Check SNMP counters.

Eu tentei desativar os syncookies, que pararam esses erros, mas os tempos limite ainda persistiram.

Durante os tempos limite, começo a ver um acúmulo de TIME_WAIT:

netstat -ntla | awk '{print $6}' | sort | uniq -c | sort -rn
   6268 ESTABLISHED
    831 TIME_WAIT
      6 LISTEN
      2 FIN_WAIT1
      1 Foreign
      1 established)

A minha pergunta é, onde mais posso procurar determinar o gargalo aqui? Existem outros logs ou comandos de erro que eu possa usar para monitorar?

Aqui está o meu nginx.conf (o FastCGI e o cache normal do navegador estão no meu arquivo padrão). Eu tentei multi_accept, o que parece piorar os tempos limite. Eu sei que as conexões do trabalhador são ridículas, mas não parece importar o quanto eu as elevo ou diminuo:

user www-data;
worker_processes auto;
worker_rlimit_nofile 200000;
pid /run/nginx.pid;

events {
    worker_connections 200000;
    # multi_accept on;
    use epoll;

}

http {

    ##
    # Basic Settings
    ##

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    server_tokens off;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##
    access_log off;
    # access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Aqui está o meu sysctl.conf

### IMPROVE SYSTEM MEMORY MANAGEMENT ###

# 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
net.ipv4.tcp_syncookies = 1

### 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 = 4096

E eu coloquei estes em limits.conf:

*         hard    nofile      500000
*         soft    nofile      500000
root      hard    nofile      500000
root      soft    nofile      500000
    
por jm92 17.02.2016 / 18:35

0 respostas