Ottimizzazione di nginx worker_process per ottenere 100k hit al minuto


115

Abbiamo un server che serve un file html.

In questo momento il server ha 2 CPU e 2 GB di RAM. Da blitz.io, stiamo ottenendo circa 12k connessioni al minuto e ovunque da 200 timeout in quei 60 secondi con 250 connessioni simultanee al secondo.

worker_processes  2;

events {
 worker_connections 1024;
}

Se aumento il timeout, il tempo di risposta inizia a salire oltre un secondo.

Cos'altro posso fare per spremere più succo da questo?

Risposte:


188

File di configurazione:

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)


# Total amount of users you can serve = worker_processes * worker_connections

ulteriori informazioni: Ottimizzazione di nginx per carichi di traffico elevati


14
Penso che l'equazione fornita per la quantità totale di utenti per secondo sia sbagliata. Invece la quantità media di utenti serviti al secondo dovrebbe essere = worker_processes * worker_connections / (keepalive_timeout * 2) Pertanto, il file conf sopra può server ~ 7.6K connessioni al secondo, che è molto al di sopra di ciò di cui @ablemike ha bisogno. Tuttavia, worker_rlimit_nofile è una buona direttiva da utilizzare, se ulimit è restrittivo e non si desidera modificarlo.
Ethan

2
@ Ethan, perché dovrebbe essere diviso per 2? Se ogni secondo otteniamo 100 nuove connessioni e il timeout è 5, quindi stringendo con il sesto secondo, avremo costantemente 5 * 100 connessioni che non sono ancora terminate sul lato server. potremmo averne di meno se ad alcuni utenti vengono interrotte le connessioni
stesse

3
quella formula non funziona se keepalive è impostato su 0s (disabilitato)
Tilo

5
Ogni connessione richiede 2 file handle anche per file statici come immagini / JS / CSS. Questo è come 1 per la connessione del client e il secondo per l'apertura del file statico. Pertanto, è più sicuro modificare worker_rlimit_nofile = 2 * worker_connections.
Ethan

4
Usa worker_rlimit_nofile ma dovresti anche chiamare 'ulimit -n' per impostare il valore del conteggio dei file aperti per processo. È meglio farlo nello script di inizializzazione.
Ethan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.