Nginx 10k gleichzeitige Verbindungen

7

In Nginx (Connecton-Zeitüberschreitung) können nicht mehr als 3.000 gleichzeitige Anforderungen verarbeitet werden. Wir ändern auch das ulimit auf 20000. Es folgen meine Dateien nginx.conf und 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

Wir verwenden Ubuntu OS mit 4 CPU und 8 GB RAM. Ich sehe kaum CPU- und RAM-Auslastung. Ich feuere gerade die Nginx-Standardseiten-URL an.

user50442
quelle
Was ist in Ihren Protokollen?
Michael Hampton
1
Das Leerzeichen + Kommentar in der letzten Zeile des events {...}Blocks ist zumindest für Menschen verwirrend. Wenn es in der Konfiguration tatsächlich so ist, schlage ich vor, es zu korrigieren.
Xofer
@xofer nehme es in der nächsten Zeile an. Es könnte ein Tippfehler sein.
Vajapravin
1
Wie testest du?
Oliver
worker_connections * worker_processes ist Ihre maximale Anzahl gleichzeitiger Verbindungen, glaube ich ... stackoverflow.com/questions/7325211/…
rogerdpack

Antworten:

6

Ich empfehle Ihnen dringend, Micro-Caching zu verwenden.

Beispiel: http://www.howtoforge.com/why-you-should-always-use-nginx-with-microcaching http://reviewsignal.com/blog/2014/06/25/40-million-hits-a -day-on-WordPress-using-a-10-vps /

Ich habe kürzlich Micro-Caching auf meiner Box eingerichtet. Mit Apache Benchmark hält es bis zu 50.000 Verbindungen, CPU geht nur auf 6%. Keine Zeitüberschreitung, Seite wird in 1,1 ms bereitgestellt.

Diese Beispielhandbücher oben schlage ich nur für "nur anzeigen" vor, weil sie nicht korrekt sind. In meinem Fall habe ich viele Stunden damit verbracht, dies einzurichten, aber es ist diesen Stress wert :)

Jānis Konošonoks
quelle
2
Dies ist ein gefährlicher Ansatz, wenn Ihre Webanwendung Cookies verwendet.
Niels B.
Sie können den Mikrocache für Anfragen mit einem PHP-Sitzungscookie deaktivieren.
Artfulrobot
upvoted! dumme Frage, wie funktioniert das, wenn Sie node.js und nicht PHP verwenden, wird fastcgi nicht richtig darauf ausgeführt?
PirateApp
1

Sie erwähnen, dass Sie das Benutzerdateilimit auf 20000 festgelegt haben, aber nicht wie.

Unter Ubuntu ändern Sie die Hard- und Soft-Limits in /etc/security/limits.conf Angenommen, der Benutzer, der Nginx ausführt www-data, fügt dies am Ende der Datei hinzu:

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

Wenn Sie überprüfen möchten, wie hoch Ihr aktuelles Limit ist:

su - www-data
ulimit -Hn
ulimit -Sn
Alex R.
quelle
2
Das wird nicht funktionieren. limits.conf ist Teil der PAM-Suite und wendet die Limits daher nur auf Prozesse an, die PAM durchlaufen. "su" tut es, also bist du gut dort. Dienste, die von init (upstart) gestartet wurden, funktionieren nicht. Upstart bietet eine Möglichkeit, Grenzwerte für die Upstart-Konfigurationsdatei festzulegen.
Chris Cogdon
Wie es geht über systemd
Alex