Ho una piccola configurazione VPS con nginx. Voglio sfruttare al massimo le prestazioni possibili, quindi ho sperimentato l'ottimizzazione e i test di carico.
Sto usando Blitz.io per fare i test di carico OTTENENDO un piccolo file di testo statico e incappando in uno strano problema in cui il server sembra inviare reimpostazioni TCP una volta che il numero di connessioni simultanee raggiunge circa il 2000. So che questo è molto una grande quantità, ma usando htop il server ha ancora molto da risparmiare in termini di tempo e memoria della CPU, quindi vorrei capire l'origine di questo problema per vedere se posso spingerlo ulteriormente.
Sto eseguendo Ubuntu 14.04 LTS (64 bit) su un VPS Linode da 2 GB.
Non ho abbastanza reputazione per pubblicare direttamente questo grafico, quindi ecco un link al grafico Blitz.io:
Ecco alcune cose che ho fatto per cercare di capire l'origine del problema:
- Il valore di configurazione nginx
worker_rlimit_nofile
è impostato su 8192 - hanno
nofile
impostato a 64000 per entrambi i limiti hard e soft perroot
ewww-data
utente (quello che viene eseguito come nginx) a/etc/security/limits.conf
non ci sono indicazioni in cui qualcosa vada storto
/var/log/nginx.d/error.log
(in genere, se si verificano limiti ai descrittori di file, nginx stampa messaggi di errore che lo dicono)Ho installato uww, ma nessuna regola di limitazione della velocità. Il registro ufw indica che nulla è stato bloccato e ho provato a disabilitare ufw con lo stesso risultato.
- Non ci sono errori indicativi in
/var/log/kern.log
- Non ci sono errori indicativi in
/var/log/syslog
Ho aggiunto i seguenti valori
/etc/sysctl.conf
e li ho caricatisysctl -p
senza alcun effetto:net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
Qualche idea?
EDIT: ho fatto un nuovo test, passando a 3000 connessioni su un file molto piccolo (solo 3 byte). Ecco il grafico Blitz.io:
Ancora una volta, secondo Blitz, tutti questi errori sono errori "Ripristino connessione TCP".
Ecco il grafico della larghezza di banda di Linode. Tieni presente che si tratta di una media di 5 minuti, quindi il suo passa basso è filtrato un po '(la larghezza di banda istantanea è probabilmente molto più alta), ma comunque non è niente:
PROCESSORE:
I / O:
Ecco htop
verso la fine del test:
Ho anche acquisito parte del traffico utilizzando tcpdump su un test diverso (ma simile), iniziando l'acquisizione quando sono iniziati gli errori:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
Ecco il file se qualcuno vuole dare un'occhiata (~ 20 MB): https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=sharing
Ecco un grafico della larghezza di banda di Wireshark:
(La riga contiene tutti i pacchetti, le barre blu sono errori TCP)
Dalla mia interpretazione della cattura (e non sono un esperto), sembra che i flag TCP RST provengano dall'origine di test del carico, non dal server. Quindi, supponendo che qualcosa non vada storto dal lato del servizio di test del carico, è sicuro supporre che questo sia il risultato di una sorta di gestione della rete o di mitigazione DDOS tra il servizio di test del carico e il mio server?
Grazie!
net.core.netdev_max_backlog
fino al 2000? Diversi esempi che ho visto hanno un ordine di grandezza superiore per le connessioni gigabit (e 10Gig).