Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Detaillierte Erläuterung der Nginx-Konfigurationsparameter für hohe Parallelität

Detaillierte Erläuterung der Nginx-Konfigurationsparameter für hohe Parallelität

巴扎黑
巴扎黑Original
2017-08-23 15:25:582914Durchsuche

1. Im Allgemeinen sind die folgenden Elemente in der Nginx-Konfigurationsdatei effektiver für die Optimierung:

1. worker_processes 8;

Es wird empfohlen, die Anzahl der Nginx-Prozesse entsprechend anzugeben zur Anzahl der CPUs, normalerweise ein Vielfaches davon (z. B. werden 2 Quad-Core-CPUs als 8 gezählt).

2. worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000;

Weisen Sie jedem Prozess CPU zu sind 8 CPUs zugeordnet, natürlich kann man auch mehr schreiben, oder Verteilen Sie einen
-Prozess auf mehrere CPUs.

3. worker_rlimit_nofile65535;

Dieser Befehl bezieht sich auf die maximale Anzahl der von einem Nginx-Prozess geöffneten Dateideskriptoren. Der theoretische Wert sollte die maximale Anzahl geöffneter Dateien (ulimit -n) und nginx sein Die Anzahl der Prozesse wird aufgeteilt, aber Nginx verteilt Anfragen nicht so gleichmäßig, daher ist es am besten, den Wert mit ulimit -n konsistent zu halten.

Jetzt beträgt die Anzahl der geöffneten Dateien unter dem Linux 2.6-Kernel 65535, und worker_rlimit_nofile sollte entsprechend mit 65535 ausgefüllt werden.


Das liegt daran, dass die Zuordnung von Anfragen zu Prozessen während der Nginx-Planung nicht so ausgewogen ist. Wenn Sie also 10240 eingeben und die Gesamtgleichzeitigkeit 30.000–40.000 erreicht, kann die Anzahl der Prozesse 10240 überschreiten und ein 502-Fehler auftreten wird zurückgegeben.

So zeigen Sie den Linux-Systemdateideskriptor an:

[root@web001 ~]# sysctl -a |

fs.file-max = 789972

fs.file-nr = 510 0 789972

4. useepoll;

Epolls I/O-Modell verwenden

(

Zusätzlich Erklärung:

Ähnlich wie Apache verfügt Nginx über unterschiedliche Ereignismodelle für verschiedene Betriebssysteme

A) Standardereignismodell

Auswahl und Abfrage gehören zum Standardereignismodell. Wenn das aktuelle vorhanden ist Keine effizientere Methode im System, Nginx wählt „Auswählen“ oder „Abfragen“
B) Effizientes Ereignismodell
Kqueue: Wird in FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 und MacOS X verwendet. MacOS verwendet X-System mit zwei Prozessoren Die Verwendung von kqueue kann zum Absturz des Kernels führen.
Epoll: Wird in Systemen mit Linux-Kernel Version 2.6 und höher verwendet.


/dev/poll: verwendet in Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ und Tru64 UNIX 5.1A+.


Eventport: Wird unter Solaris 10 verwendet. Um Kernel-Abstürze zu verhindern, ist die Installation von Sicherheitspatches erforderlich.

)

5. worker_connections65535;

Theoretisch beträgt die maximale Anzahl an Verbindungen pro Nginx-Server worker_processes*worker_connections.

6. keepalive_timeout60;

Keepalive-Timeout.

7. client_header_buffer_size4k;

Die Puffergröße des Client-Anforderungsheaders kann entsprechend der Paging-Größe Ihres Systems festgelegt werden Aufgrund von Im Allgemeinen ist das System-Paging größer als 1 KB, daher wird die Paging-Größe hier festgelegt.

Die Paging-Größe kann mit dem Befehl getconf PAGESIZE ermittelt werden.

[root@web001 ~]# getconf PAGESIZE

4096

Aber es gibt auch Fälle, in denen client_header_buffer_size 4k überschreitet, der Wert client_header_buffer_size jedoch auf das gesamte „System“ festgelegt werden muss Paging-Größe" mehrfach.

8. open_file_cachemax=65535 inactive=60s;

Dies ist standardmäßig nicht aktiviert. Es wird empfohlen, konsistent zu sein mit der Anzahl der geöffneten Dateien. Bezieht sich darauf, wie lange die Datei nicht angefordert wurde, bevor der Cache gelöscht wird.

9. open_file_cache_valid80s;

Dies bezieht sich darauf, wie oft die zwischengespeicherten gültigen Informationen überprüft werden sollen.

10. open_file_cache_min_uses1;

Die Mindestanzahl der Verwendungen der Datei innerhalb des inaktiven Parameters des open_file_cache-Befehls wird der Dateideskriptor immer im Cache geöffnet Wenn im obigen Beispiel eine Datei innerhalb der inaktiven Zeit nicht verwendet wird, wird sie entfernt.

2. Bezüglich der Optimierung der Kernel-Parameter:

net.ipv4.tcp_max_tw_buckets = 6000

Die Anzahl der Wartezeiten ist standardmäßig 180000.

net.ipv4.ip_local_port_range = 1024 65000

Der Portbereich, den das System öffnen darf.

net.ipv4.tcp_tw_recycle = 1

Zeitwartezeit für schnelles Recycling aktivieren.

net.ipv4.tcp_tw_reuse = 1

Wiederverwendung aktivieren. Ermöglicht die Wiederverwendung von TIME-WAIT-Sockets für neue TCP-Verbindungen.

net.ipv4.tcp_syncookies = 1

SYN-Cookies aktivieren Wenn die SYN-Warteschlange überläuft, aktivieren Sie Cookies, um damit umzugehen.

net.core.somaxconn = 262144

Der Rückstand der Listen-Funktion in der Webanwendung begrenzt den net.core.somaxconn unserer Kernel-Parameter standardmäßig auf 128, während der NGX_LISTEN_BACKLOG definiert ist Der Standardwert von nginx ist 511, daher muss dieser Wert angepasst werden.

net.core.netdev_max_backlog = 262144

Die maximale Anzahl von Paketen, die in die Warteschlange gestellt werden dürfen, wenn jede Netzwerkschnittstelle Pakete schneller empfängt, als der Kernel sie verarbeiten kann.

net.ipv4.tcp_max_orphans = 262144

Die maximale Anzahl von TCP-Sockets im System, die keinem Benutzerdatei-Handle zugeordnet sind. Wenn diese Zahl überschritten wird, wird die verwaiste Verbindung sofort zurückgesetzt und eine Warnmeldung ausgegeben. Diese Grenze dient nur der Verhinderung einfacher DoS-Angriffe. Sie können sich nicht zu sehr darauf verlassen oder diesen Wert künstlich verringern. Sie sollten diesen Wert erhöhen (wenn Sie den Speicher erhöhen).

net.ipv4.tcp_max_syn_backlog = 262144

Der maximale Wert, der für Verbindungsanfragen aufgezeichnet wurde, die noch keine Bestätigung vom Client erhalten haben. Für Systeme mit 128 MB Speicher ist der Standardwert 1024 und für Systeme mit kleinem Speicher 128.

net.ipv4.tcp_timestamps = 0

Zeitstempel können das Umbrechen von Sequenznummern vermeiden. Bei einer 1-Gbit/s-Verbindung werden Sie auf jeden Fall auf Sequenznummern stoßen, die bereits zuvor verwendet wurden. Der Zeitstempel ermöglicht es dem Kernel, solche „abnormalen“ Pakete zu akzeptieren. Es muss hier ausgeschaltet werden.

net.ipv4.tcp_synack_retries = 1

Um eine Verbindung zum Peer zu öffnen, muss der Kernel ein SYN mit einem ACK als Antwort auf das vorherige SYN senden. Dies ist der zweite Handschlag beim sogenannten Drei-Wege-Handschlag. Diese Einstellung bestimmt die Anzahl der SYN+ACK-Pakete, die der Kernel sendet, bevor die Verbindung aufgegeben wird.

net.ipv4.tcp_syn_retries = 1

Die Anzahl der zu sendenden SYN-Pakete, bevor der Kernel den Verbindungsaufbau aufgibt.

net.ipv4.tcp_fin_timeout = 1

Wenn der Socket vom lokalen Ende geschlossen werden soll, bestimmt dieser Parameter, wie lange er im FIN-WAIT-2-Zustand bleibt. Der Peer kann Fehler machen und die Verbindung niemals schließen oder sogar unerwartet abstürzen. Der Standardwert beträgt 60 Sekunden. 2.2 Der übliche Wert für den Kernel ist 180 Sekunden. Sie können diese Einstellung drücken, aber denken Sie daran, dass selbst wenn Ihr Computer ein leicht ausgelasteter WEB-Server ist, aufgrund einer großen Anzahl toter Sockets die Gefahr eines Speicherüberlaufs besteht. WAIT-2 ist weniger gefährlich als FIN-WAIT-1, da es nur bis zu 1,5 KB Speicher beanspruchen kann, aber ihre Lebensdauer ist länger.

net.ipv4.tcp_keepalive_time = 30

Wenn Keepalive aktiviert ist, die Häufigkeit, mit der TCP Keepalive-Nachrichten sendet. Der Standardwert beträgt 2 Stunden.

3. Eine vollständige Kernel-Optimierungseinstellung wird unten veröffentlicht:

vi /etc/sysctl.conf In CentOS5.5 können alle Inhalte gelöscht und direkt durch den folgenden Inhalt ersetzt werden:

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall =. 42949672 96
net.ipv4 .tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4. tcp_wmem = 4096 16384 4194304
net.Core.wmem_Default = 8388608
Net.Core.rmem_default = 8388608
Net.Core.rmem_max = 16777216
Net.wmem_max = 16777216 net.Core.netdev_max_backlog =. 2 62144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_ synack_ret ​​​​ries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 0
net.ip v4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

Damit die Konfiguration sofort wirksam wird, verwenden Sie den folgenden Befehl:

/sbin /sysctl -p

Vier. Im Folgenden geht es um die Optimierung der Anzahl der Systemverbindungen

Der Standardwert für offene Dateien und maximale Benutzerprozesse in Linux ist 1024

#ulimit -n

1024

#ulimit –u

1024

Problembeschreibung: Der Beschreibungsserver erlaubt nur das gleichzeitige Öffnen von 1024 Dateien und verarbeitet 1024 Benutzerprozesse

Verwenden Sie ulimit -a, um das aktuelle System anzuzeigen. Alle Grenzwerte, verwenden Sie ulimit -n, um die aktuelle maximale Anzahl geöffneter Dateien anzuzeigen.

Das neu installierte Linux hat standardmäßig nur 1024. Wenn es als Server mit hoher Auslastung verwendet wird, kann es leicht zu Fehlern kommen: zu viele offene Dateien. Daher muss es größer gemacht werden.

Lösung:

Verwenden Sie ulimit –n 65535, um es sofort zu ändern, aber nach dem Neustart ist es ungültig. (Beachten Sie, dass ulimit -SHn 65535 äquivalent zu ulimit-n 65535 ist, -S sich auf weich bezieht und -H sich auf hart bezieht)

verfügt über die folgenden drei Änderungsmethoden:

1 /etc/rc. Fügen Sie eine Zeile ulimit -SHn 65535

zu local nofile 65535
* hard nofile 65535
* soft nproc 65535

* hard nproc 65535


hinzu ? Die erste Methode hat in CentOS keine Wirkung. Sie ist wirksam, und die zweite Methode ist in Debian wirksam

65535

# ulimit -u

65535

Hinweis: Der Befehl ulimit selbst verfügt über Soft- und Hard-Einstellungen und -S für Soft ist Soft-Limit

Soft-Limit bezieht sich auf den aktuellen System-Einstellwert. Der harte Grenzwert kann von normalen Benutzern gesenkt werden. Aber es kann nicht erhöht werden. Das Soft-Limit kann nicht höher eingestellt werden als das Hard-Limit. Nur der Root-Benutzer kann den harten Grenzwert erhöhen.

5. Das Folgende ist eine einfache Nginx-Konfigurationsdatei:

Benutzer www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000
01000000;
error_log. /www/log/n ginx_error.log crit;
pid /usr/local/ nginx/nginx.pid;
worker_rlimit_nofile 204800;
events
{
use epoll;
worker_connections 204800;
}
http
{
include mime. Typen;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
Datei senden an ;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevel=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300 ;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_headerhttp_500;
open_file_cache max=204800. inactive=20 s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types Anwendung/x -javascript text/cssapplication/xml;
gzip_vary on;
server
{
listen 8080;
server_name backup.aiju.com;
index index.php index.htm;
root /www/html/;
location /status
{
stub_status on;
}
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js |css)$
{
expires 30d;
}
log_format access '$remote_addr -- $remote_user [$time_local]"$request" '
'$status $body_bytes_sent "$http_referer " '
'"$http_user_agent" $http_x_forwarded_for';
access_log /www/log/access.log access;
}
}

六、关于FastCGI 的几个指令::

fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=1:2keys_zone=TEST:10minactive=5m;

这个指令为FastCGI. 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间.

fastcgi_connect_timeout 300;

指定连接到后端FastCGI 的超时时间.

fastcgi_send_timeout 300;

向FastCGI FastCGI FastCGI FastCGI read_timeout 300;

接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应的超时时间.

fastcgi_buffer_size 4k;

指定读取FastCGI应答第一般第一部分应答不会超过,由于页面大小为4k,所以这里设置为4k。

fastcgi_buffers 8 4k;

指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答.

fastcgi_busy_buffers_size 8k;

这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers cgi_temp_file_write_size 8k;

在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers 的两倍.

fastcgi_cache TEST

开启FastCGI 缓存并且为其制定一个名称.个人感觉开启缓存非常有用, 可以有效降低CPU-Fehler: 502 Sekunden指定的应答代码指定缓存时间,如上例中将200, 302 应答缓存一小时, 301 应答缓存1 天, 其他为1 分钟.

fastcgi_cache_min_uses. 1;

缓存在fastcgi_cache_path ist nicht inaktiv.如上例,如果在5 分钟内某文件1次也没有被使用,那么这个文件将被移除.

fastcgi_cache_use_stale error timeout. invalid_head erhttp_500;

不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的.以上为nginx 中FastCGI相关参数, 另外, FastCGI 自身也有一些配置需要进行优化, 如果你使用php-fpm来管理FastCGI, 可以修改配置文件中的以下值:

60

同时处理的并发请求数,即它将开启最多60. 个子线程来处理并发连接.

102400

最多打开文件数.

204800

每个进程在重置之前能够执行的最多请求数.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Nginx-Konfigurationsparameter für hohe Parallelität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn